diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..ea43e4b --- /dev/null +++ b/404.html @@ -0,0 +1 @@ + All The Guides

404 - Not found

\ No newline at end of file diff --git a/404/index.html b/404/index.html new file mode 100644 index 0000000..a1b02b1 --- /dev/null +++ b/404/index.html @@ -0,0 +1,12 @@ + 404 - All The Guides
Skip to content

404

Page Not Found

The resource you’re visiting may or may not have ever existed.

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

All The Team


Owner

  • WhatTheDrunk

Admins

  • oly2o6 (Second In Command)
  • Mitchell52
  • MutantGumdrop
  • Maddy
  • thevortex
  • Ki-Tan

Modpack Development Team

  • Arochio
  • Billy
  • DJNifos
  • Drack.ion
  • Draxial
  • Jebraltar
  • KJM
  • LobsterJonn
  • radiomike12
  • ToshibaMicrowave
  • ZephyrWindSpirit 🐉

All The Team

  • 1Yumi
  • Bored
  • Klonoa
  • SlackerNet>XI<
  • Timeconsumer
  • Ultramega

Former - Retired

  • AlfredGG | (Former QuestDev)
  • EnigmaQuip
  • Phantom
  • Dijkstra
  • Seg
  • screret
  • uʍopǝpᴉsdn
  • BeeJnugggets
  • 0mega420
  • Thunder_Nova the Pun_isher

Current as of (04/26/2024)

\ No newline at end of file diff --git a/about/allthetimeline/index.html b/about/allthetimeline/index.html new file mode 100644 index 0000000..70018b6 --- /dev/null +++ b/about/allthetimeline/index.html @@ -0,0 +1,12 @@ + All The Timeline - All The Guides

All The Mods: Timeline

2024

  • Jan 6: All The Mods 9: No Frills (ATM9NF)
  • Apr 1: Maul The Odds (MTO)
  • May 30: All The Mods 9: To The Sky (ATM9TTS)

2023

  • Jan 11: All The Mods: Gravitas - (ATMG)
  • Jul 25: All The Mods: Volcano Block - (ATMVB)
  • Dec 17: All The Mods: Gravitas²

2022

  • Aug 03: All The Mods 7: To The Sky - (ATM7TTS)
  • Oct 18: All The Mods 7: Lite - (ATM7L)
  • Nov 30: All The Mods 9 - (ATM9)

2021

  • Feb 01: All The Mods 6 Sky - (ATM6TTS)
  • Jul 02: All The Magic Spellbound - (ATMS)
  • Aug 26: All The Mods 8 - (ATM8)

2020

  • Jan 05: All The Mods 5 - (ATM5)
  • Feb 06: All The Mods Fabric - (ATMF)
  • Feb 11: All The Mods Slice Of Pi - (ATMSLOP)
  • Mar 31: All The Mods 0 - (ATM0)
  • May 07: All The Mods 6 - (ATM6)
  • Dec 08: All The Mods 7 - (ATM7)
  • Dec 30: All The Mods Slice Of Pi 2 - (ATMSLOP2)

2019

  • Jan 02: All The Mods Magic
  • Feb 27: All The Mods 4 - (ATM4)
  • Jun 26: All The Mods 3 Expert - (ATM3E)

2018

  • Aug 28: All The Mods 3 Remix - (ATM3R)

2017

  • Jun 17: All The Mods 3 - (ATM3)
  • Aug 9: All The Mods 3 Lite - (ATM3L)
  • Aug 17: All The Mods Expert - (Remastered)

2016

  • Mar 03: All The Mods - (ATM1)
  • Sep 03: All The Mods Lite - (ATM1L)
  • Oct 09: All The Mods Expert - (ATM1E)
  • Oct 19: All The Sky
  • Nov 16: All The Mods 2 - (ATM2)
\ No newline at end of file diff --git a/about/contributors/index.html b/about/contributors/index.html new file mode 100644 index 0000000..98d3335 --- /dev/null +++ b/about/contributors/index.html @@ -0,0 +1,12 @@ + Contributors - All The Guides

Contributors

List of all Contributors who’ve helped with Guide, Pack(s), etc..

  • segfault (64.8%)
  • ArcTrooper (34.27%)
  • dKatsuro (0.41%)
  • Jeremiah Winsley (0.38%)
  • billbertking1 (0.11%)
  • C_ffeeStain (0.03%)
  • kinglugus90 (0.02%)

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/about/feedback/index.html b/about/feedback/index.html new file mode 100644 index 0000000..c3f3da1 --- /dev/null +++ b/about/feedback/index.html @@ -0,0 +1,46 @@ + Feedback - All The Guides

Feedback

Please keep comments PG13 - clear of profanity.

We appreciate all of your feedback in regards to Packs, and Guides!

Comments

\ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..deabc45 --- /dev/null +++ b/about/index.html @@ -0,0 +1,12 @@ + About - All The Guides

About


All the Mods started out as a private pack amongst a few friends that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

Can you get to the Creative items by making the “ATM Star”?

In All the Mods we will continue the tradition adding many new mods while going for more stability.

Does “All The Mods” really contain ALL THE MODS? No, of course not.


Hosting

Need hosting? Check out Akliz (With a discount) on us!

Start playing for only $20/m

Save 20% off of the first month using coupon code allthemods


All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/about/license/index.html b/about/license/index.html new file mode 100644 index 0000000..2493e2b --- /dev/null +++ b/about/license/index.html @@ -0,0 +1,23 @@ + License - All The Guides

License

All The Mods (Packs/Mods) are released on curseforge only, as All Rights Reserved.

This covers the following files/folders,

  • All Quests and rewards in \instance\config\ftbquests\quests\
  • All custom KubeJS scripts in \instance\kubejs\
  • All custom AllTheMods PackMenu assets in \instance\packmenu\resources\

What does All Rights Reserved Mean?

  • For players, it means nothing, you are still permitted to play, film, and or stream the pack.
  • For anyone else, it means you CANNOT redistribute any of the above folders or files in any publicly released packs without permission from ATM
All Rights Reserved
+
+Copyright (c) 2023-2024 All The Mods (AllTheMods / ATM)
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/docs/assets/images/404.png b/assets/images/404.png similarity index 100% rename from docs/assets/images/404.png rename to assets/images/404.png diff --git a/docs/assets/images/akliz.png b/assets/images/akliz.png similarity index 100% rename from docs/assets/images/akliz.png rename to assets/images/akliz.png diff --git a/docs/assets/images/atg.png b/assets/images/atg.png similarity index 100% rename from docs/assets/images/atg.png rename to assets/images/atg.png diff --git a/docs/assets/images/atm.png b/assets/images/atm.png similarity index 100% rename from docs/assets/images/atm.png rename to assets/images/atm.png diff --git a/docs/assets/images/atms.ico b/assets/images/atms.ico similarity index 100% rename from docs/assets/images/atms.ico rename to assets/images/atms.ico diff --git a/docs/assets/images/atms.png b/assets/images/atms.png similarity index 100% rename from docs/assets/images/atms.png rename to assets/images/atms.png diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000..1cf13b9 Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/docs/assets/images/modpatreon.png b/assets/images/modpatreon.png similarity index 100% rename from docs/assets/images/modpatreon.png rename to assets/images/modpatreon.png diff --git a/docs/assets/images/unobpatreon.png b/assets/images/unobpatreon.png similarity index 100% rename from docs/assets/images/unobpatreon.png rename to assets/images/unobpatreon.png diff --git a/docs/assets/images/vibpatreon.png b/assets/images/vibpatreon.png similarity index 100% rename from docs/assets/images/vibpatreon.png rename to assets/images/vibpatreon.png diff --git a/assets/javascripts/bundle.fe8b6f2b.min.js b/assets/javascripts/bundle.fe8b6f2b.min.js new file mode 100644 index 0000000..cf778d4 --- /dev/null +++ b/assets/javascripts/bundle.fe8b6f2b.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Fi=Object.create;var gr=Object.defineProperty;var ji=Object.getOwnPropertyDescriptor;var Wi=Object.getOwnPropertyNames,Dt=Object.getOwnPropertySymbols,Ui=Object.getPrototypeOf,xr=Object.prototype.hasOwnProperty,no=Object.prototype.propertyIsEnumerable;var oo=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t)=>{for(var r in t||(t={}))xr.call(t,r)&&oo(e,r,t[r]);if(Dt)for(var r of Dt(t))no.call(t,r)&&oo(e,r,t[r]);return e};var io=(e,t)=>{var r={};for(var o in e)xr.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Dt)for(var o of Dt(e))t.indexOf(o)<0&&no.call(e,o)&&(r[o]=e[o]);return r};var yr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Di=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Wi(t))!xr.call(e,n)&&n!==r&&gr(e,n,{get:()=>t[n],enumerable:!(o=ji(t,n))||o.enumerable});return e};var Vt=(e,t,r)=>(r=e!=null?Fi(Ui(e)):{},Di(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var ao=(e,t,r)=>new Promise((o,n)=>{var i=p=>{try{s(r.next(p))}catch(c){n(c)}},a=p=>{try{s(r.throw(p))}catch(c){n(c)}},s=p=>p.done?o(p.value):Promise.resolve(p.value).then(i,a);s((r=r.apply(e,t)).next())});var co=yr((Er,so)=>{(function(e,t){typeof Er=="object"&&typeof so!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Er,function(){"use strict";function e(r){var o=!0,n=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(H){return!!(H&&H!==document&&H.nodeName!=="HTML"&&H.nodeName!=="BODY"&&"classList"in H&&"contains"in H.classList)}function p(H){var mt=H.type,ze=H.tagName;return!!(ze==="INPUT"&&a[mt]&&!H.readOnly||ze==="TEXTAREA"&&!H.readOnly||H.isContentEditable)}function c(H){H.classList.contains("focus-visible")||(H.classList.add("focus-visible"),H.setAttribute("data-focus-visible-added",""))}function l(H){H.hasAttribute("data-focus-visible-added")&&(H.classList.remove("focus-visible"),H.removeAttribute("data-focus-visible-added"))}function f(H){H.metaKey||H.altKey||H.ctrlKey||(s(r.activeElement)&&c(r.activeElement),o=!0)}function u(H){o=!1}function h(H){s(H.target)&&(o||p(H.target))&&c(H.target)}function w(H){s(H.target)&&(H.target.classList.contains("focus-visible")||H.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(i),i=window.setTimeout(function(){n=!1},100),l(H.target))}function A(H){document.visibilityState==="hidden"&&(n&&(o=!0),te())}function te(){document.addEventListener("mousemove",J),document.addEventListener("mousedown",J),document.addEventListener("mouseup",J),document.addEventListener("pointermove",J),document.addEventListener("pointerdown",J),document.addEventListener("pointerup",J),document.addEventListener("touchmove",J),document.addEventListener("touchstart",J),document.addEventListener("touchend",J)}function ie(){document.removeEventListener("mousemove",J),document.removeEventListener("mousedown",J),document.removeEventListener("mouseup",J),document.removeEventListener("pointermove",J),document.removeEventListener("pointerdown",J),document.removeEventListener("pointerup",J),document.removeEventListener("touchmove",J),document.removeEventListener("touchstart",J),document.removeEventListener("touchend",J)}function J(H){H.target.nodeName&&H.target.nodeName.toLowerCase()==="html"||(o=!1,ie())}document.addEventListener("keydown",f,!0),document.addEventListener("mousedown",u,!0),document.addEventListener("pointerdown",u,!0),document.addEventListener("touchstart",u,!0),document.addEventListener("visibilitychange",A,!0),te(),r.addEventListener("focus",h,!0),r.addEventListener("blur",w,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var Yr=yr((Rt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Rt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Rt=="object"?Rt.ClipboardJS=r():t.ClipboardJS=r()})(Rt,function(){return function(){var e={686:function(o,n,i){"use strict";i.d(n,{default:function(){return Ii}});var a=i(279),s=i.n(a),p=i(370),c=i.n(p),l=i(817),f=i.n(l);function u(V){try{return document.execCommand(V)}catch(_){return!1}}var h=function(_){var M=f()(_);return u("cut"),M},w=h;function A(V){var _=document.documentElement.getAttribute("dir")==="rtl",M=document.createElement("textarea");M.style.fontSize="12pt",M.style.border="0",M.style.padding="0",M.style.margin="0",M.style.position="absolute",M.style[_?"right":"left"]="-9999px";var j=window.pageYOffset||document.documentElement.scrollTop;return M.style.top="".concat(j,"px"),M.setAttribute("readonly",""),M.value=V,M}var te=function(_,M){var j=A(_);M.container.appendChild(j);var D=f()(j);return u("copy"),j.remove(),D},ie=function(_){var M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},j="";return typeof _=="string"?j=te(_,M):_ instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(_==null?void 0:_.type)?j=te(_.value,M):(j=f()(_),u("copy")),j},J=ie;function H(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?H=function(M){return typeof M}:H=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},H(V)}var mt=function(){var _=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=_.action,j=M===void 0?"copy":M,D=_.container,Y=_.target,ke=_.text;if(j!=="copy"&&j!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(Y!==void 0)if(Y&&H(Y)==="object"&&Y.nodeType===1){if(j==="copy"&&Y.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(j==="cut"&&(Y.hasAttribute("readonly")||Y.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(ke)return J(ke,{container:D});if(Y)return j==="cut"?w(Y):J(Y,{container:D})},ze=mt;function Ie(V){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ie=function(M){return typeof M}:Ie=function(M){return M&&typeof Symbol=="function"&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},Ie(V)}function _i(V,_){if(!(V instanceof _))throw new TypeError("Cannot call a class as a function")}function ro(V,_){for(var M=0;M<_.length;M++){var j=_[M];j.enumerable=j.enumerable||!1,j.configurable=!0,"value"in j&&(j.writable=!0),Object.defineProperty(V,j.key,j)}}function Ai(V,_,M){return _&&ro(V.prototype,_),M&&ro(V,M),V}function Ci(V,_){if(typeof _!="function"&&_!==null)throw new TypeError("Super expression must either be null or a function");V.prototype=Object.create(_&&_.prototype,{constructor:{value:V,writable:!0,configurable:!0}}),_&&br(V,_)}function br(V,_){return br=Object.setPrototypeOf||function(j,D){return j.__proto__=D,j},br(V,_)}function Hi(V){var _=Pi();return function(){var j=Wt(V),D;if(_){var Y=Wt(this).constructor;D=Reflect.construct(j,arguments,Y)}else D=j.apply(this,arguments);return ki(this,D)}}function ki(V,_){return _&&(Ie(_)==="object"||typeof _=="function")?_:$i(V)}function $i(V){if(V===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return V}function Pi(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(V){return!1}}function Wt(V){return Wt=Object.setPrototypeOf?Object.getPrototypeOf:function(M){return M.__proto__||Object.getPrototypeOf(M)},Wt(V)}function vr(V,_){var M="data-clipboard-".concat(V);if(_.hasAttribute(M))return _.getAttribute(M)}var Ri=function(V){Ci(M,V);var _=Hi(M);function M(j,D){var Y;return _i(this,M),Y=_.call(this),Y.resolveOptions(D),Y.listenClick(j),Y}return Ai(M,[{key:"resolveOptions",value:function(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof D.action=="function"?D.action:this.defaultAction,this.target=typeof D.target=="function"?D.target:this.defaultTarget,this.text=typeof D.text=="function"?D.text:this.defaultText,this.container=Ie(D.container)==="object"?D.container:document.body}},{key:"listenClick",value:function(D){var Y=this;this.listener=c()(D,"click",function(ke){return Y.onClick(ke)})}},{key:"onClick",value:function(D){var Y=D.delegateTarget||D.currentTarget,ke=this.action(Y)||"copy",Ut=ze({action:ke,container:this.container,target:this.target(Y),text:this.text(Y)});this.emit(Ut?"success":"error",{action:ke,text:Ut,trigger:Y,clearSelection:function(){Y&&Y.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(D){return vr("action",D)}},{key:"defaultTarget",value:function(D){var Y=vr("target",D);if(Y)return document.querySelector(Y)}},{key:"defaultText",value:function(D){return vr("text",D)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(D){var Y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return J(D,Y)}},{key:"cut",value:function(D){return w(D)}},{key:"isSupported",value:function(){var D=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],Y=typeof D=="string"?[D]:D,ke=!!document.queryCommandSupported;return Y.forEach(function(Ut){ke=ke&&!!document.queryCommandSupported(Ut)}),ke}}]),M}(s()),Ii=Ri},828:function(o){var n=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,p){for(;s&&s.nodeType!==n;){if(typeof s.matches=="function"&&s.matches(p))return s;s=s.parentNode}}o.exports=a},438:function(o,n,i){var a=i(828);function s(l,f,u,h,w){var A=c.apply(this,arguments);return l.addEventListener(u,A,w),{destroy:function(){l.removeEventListener(u,A,w)}}}function p(l,f,u,h,w){return typeof l.addEventListener=="function"?s.apply(null,arguments):typeof u=="function"?s.bind(null,document).apply(null,arguments):(typeof l=="string"&&(l=document.querySelectorAll(l)),Array.prototype.map.call(l,function(A){return s(A,f,u,h,w)}))}function c(l,f,u,h){return function(w){w.delegateTarget=a(w.target,f),w.delegateTarget&&h.call(l,w)}}o.exports=p},879:function(o,n){n.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},n.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||n.node(i[0]))},n.string=function(i){return typeof i=="string"||i instanceof String},n.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(o,n,i){var a=i(879),s=i(438);function p(u,h,w){if(!u&&!h&&!w)throw new Error("Missing required arguments");if(!a.string(h))throw new TypeError("Second argument must be a String");if(!a.fn(w))throw new TypeError("Third argument must be a Function");if(a.node(u))return c(u,h,w);if(a.nodeList(u))return l(u,h,w);if(a.string(u))return f(u,h,w);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(u,h,w){return u.addEventListener(h,w),{destroy:function(){u.removeEventListener(h,w)}}}function l(u,h,w){return Array.prototype.forEach.call(u,function(A){A.addEventListener(h,w)}),{destroy:function(){Array.prototype.forEach.call(u,function(A){A.removeEventListener(h,w)})}}}function f(u,h,w){return s(document.body,u,h,w)}o.exports=p},817:function(o){function n(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var p=window.getSelection(),c=document.createRange();c.selectNodeContents(i),p.removeAllRanges(),p.addRange(c),a=p.toString()}return a}o.exports=n},279:function(o){function n(){}n.prototype={on:function(i,a,s){var p=this.e||(this.e={});return(p[i]||(p[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var p=this;function c(){p.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),p=0,c=s.length;for(p;p{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var ts=/["'&<>]/;ei.exports=rs;function rs(e){var t=""+e,r=ts.exec(t);if(!r)return t;var o,n="",i=0,a=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function N(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],a;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(s){a={error:s}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i}function q(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o1||s(u,h)})})}function s(u,h){try{p(o[u](h))}catch(w){f(i[0][3],w)}}function p(u){u.value instanceof nt?Promise.resolve(u.value.v).then(c,l):f(i[0][2],u)}function c(u){s("next",u)}function l(u){s("throw",u)}function f(u,h){u(h),i.shift(),i.length&&s(i[0][0],i[0][1])}}function mo(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof de=="function"?de(e):e[Symbol.iterator](),r={},o("next"),o("throw"),o("return"),r[Symbol.asyncIterator]=function(){return this},r);function o(i){r[i]=e[i]&&function(a){return new Promise(function(s,p){a=e[i](a),n(s,p,a.done,a.value)})}}function n(i,a,s,p){Promise.resolve(p).then(function(c){i({value:c,done:s})},a)}}function k(e){return typeof e=="function"}function ft(e){var t=function(o){Error.call(o),o.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var zt=ft(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(o,n){return n+1+") "+o.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function qe(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Fe=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,o,n,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=de(a),p=s.next();!p.done;p=s.next()){var c=p.value;c.remove(this)}}catch(A){t={error:A}}finally{try{p&&!p.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(k(l))try{l()}catch(A){i=A instanceof zt?A.errors:[A]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var u=de(f),h=u.next();!h.done;h=u.next()){var w=h.value;try{fo(w)}catch(A){i=i!=null?i:[],A instanceof zt?i=q(q([],N(i)),N(A.errors)):i.push(A)}}}catch(A){o={error:A}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(o)throw o.error}}}if(i)throw new zt(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)fo(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&qe(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&qe(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=Fe.EMPTY;function qt(e){return e instanceof Fe||e&&"closed"in e&&k(e.remove)&&k(e.add)&&k(e.unsubscribe)}function fo(e){k(e)?e():e.unsubscribe()}var $e={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var ut={setTimeout:function(e,t){for(var r=[],o=2;o0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var o=this,n=this,i=n.hasError,a=n.isStopped,s=n.observers;return i||a?Tr:(this.currentObservers=null,s.push(r),new Fe(function(){o.currentObservers=null,qe(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var o=this,n=o.hasError,i=o.thrownError,a=o.isStopped;n?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,o){return new Eo(r,o)},t}(F);var Eo=function(e){re(t,e);function t(r,o){var n=e.call(this)||this;return n.destination=r,n.source=o,n}return t.prototype.next=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,r)},t.prototype.error=function(r){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,r)},t.prototype.complete=function(){var r,o;(o=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||o===void 0||o.call(r)},t.prototype._subscribe=function(r){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(r))!==null&&n!==void 0?n:Tr},t}(g);var _r=function(e){re(t,e);function t(r){var o=e.call(this)||this;return o._value=r,o}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var o=e.prototype._subscribe.call(this,r);return!o.closed&&r.next(this._value),o},t.prototype.getValue=function(){var r=this,o=r.hasError,n=r.thrownError,i=r._value;if(o)throw n;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t}(g);var Lt={now:function(){return(Lt.delegate||Date).now()},delegate:void 0};var _t=function(e){re(t,e);function t(r,o,n){r===void 0&&(r=1/0),o===void 0&&(o=1/0),n===void 0&&(n=Lt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,o),i}return t.prototype.next=function(r){var o=this,n=o.isStopped,i=o._buffer,a=o._infiniteTimeWindow,s=o._timestampProvider,p=o._windowTime;n||(i.push(r),!a&&i.push(s.now()+p)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(r),n=this,i=n._infiniteTimeWindow,a=n._buffer,s=a.slice(),p=0;p0?e.prototype.schedule.call(this,r,o):(this.delay=o,this.state=r,this.scheduler.flush(this),this)},t.prototype.execute=function(r,o){return o>0||this.closed?e.prototype.execute.call(this,r,o):this._execute(r,o)},t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!=null&&n>0||n==null&&this.delay>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.flush(this),0)},t}(vt);var So=function(e){re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(gt);var Hr=new So(To);var Oo=function(e){re(t,e);function t(r,o){var n=e.call(this,r,o)||this;return n.scheduler=r,n.work=o,n}return t.prototype.requestAsyncId=function(r,o,n){return n===void 0&&(n=0),n!==null&&n>0?e.prototype.requestAsyncId.call(this,r,o,n):(r.actions.push(this),r._scheduled||(r._scheduled=bt.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,o,n);var a=r.actions;o!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==o&&(bt.cancelAnimationFrame(o),r._scheduled=void 0)},t}(vt);var Mo=function(e){re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;r=r||n.shift();do if(i=r.execute(r.state,r.delay))break;while((r=n[0])&&r.id===o&&n.shift());if(this._active=!1,i){for(;(r=n[0])&&r.id===o&&n.shift();)r.unsubscribe();throw i}},t}(gt);var me=new Mo(Oo);var O=new F(function(e){return e.complete()});function Yt(e){return e&&k(e.schedule)}function kr(e){return e[e.length-1]}function Xe(e){return k(kr(e))?e.pop():void 0}function He(e){return Yt(kr(e))?e.pop():void 0}function Bt(e,t){return typeof kr(e)=="number"?e.pop():t}var xt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Gt(e){return k(e==null?void 0:e.then)}function Jt(e){return k(e[ht])}function Xt(e){return Symbol.asyncIterator&&k(e==null?void 0:e[Symbol.asyncIterator])}function Zt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Gi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var er=Gi();function tr(e){return k(e==null?void 0:e[er])}function rr(e){return lo(this,arguments,function(){var r,o,n,i;return Nt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,nt(r.read())];case 3:return o=a.sent(),n=o.value,i=o.done,i?[4,nt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,nt(n)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function or(e){return k(e==null?void 0:e.getReader)}function W(e){if(e instanceof F)return e;if(e!=null){if(Jt(e))return Ji(e);if(xt(e))return Xi(e);if(Gt(e))return Zi(e);if(Xt(e))return Lo(e);if(tr(e))return ea(e);if(or(e))return ta(e)}throw Zt(e)}function Ji(e){return new F(function(t){var r=e[ht]();if(k(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Xi(e){return new F(function(t){for(var r=0;r=2;return function(o){return o.pipe(e?b(function(n,i){return e(n,i,o)}):le,Te(1),r?Be(t):zo(function(){return new ir}))}}function Fr(e){return e<=0?function(){return O}:y(function(t,r){var o=[];t.subscribe(T(r,function(n){o.push(n),e=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new g}:t,o=e.resetOnError,n=o===void 0?!0:o,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,p=s===void 0?!0:s;return function(c){var l,f,u,h=0,w=!1,A=!1,te=function(){f==null||f.unsubscribe(),f=void 0},ie=function(){te(),l=u=void 0,w=A=!1},J=function(){var H=l;ie(),H==null||H.unsubscribe()};return y(function(H,mt){h++,!A&&!w&&te();var ze=u=u!=null?u:r();mt.add(function(){h--,h===0&&!A&&!w&&(f=Wr(J,p))}),ze.subscribe(mt),!l&&h>0&&(l=new at({next:function(Ie){return ze.next(Ie)},error:function(Ie){A=!0,te(),f=Wr(ie,n,Ie),ze.error(Ie)},complete:function(){w=!0,te(),f=Wr(ie,a),ze.complete()}}),W(H).subscribe(l))})(c)}}function Wr(e,t){for(var r=[],o=2;oe.next(document)),e}function $(e,t=document){return Array.from(t.querySelectorAll(e))}function P(e,t=document){let r=fe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function fe(e,t=document){return t.querySelector(e)||void 0}function Re(){var e,t,r,o;return(o=(r=(t=(e=document.activeElement)==null?void 0:e.shadowRoot)==null?void 0:t.activeElement)!=null?r:document.activeElement)!=null?o:void 0}var xa=S(d(document.body,"focusin"),d(document.body,"focusout")).pipe(_e(1),Q(void 0),m(()=>Re()||document.body),G(1));function et(e){return xa.pipe(m(t=>e.contains(t)),K())}function kt(e,t){return C(()=>S(d(e,"mouseenter").pipe(m(()=>!0)),d(e,"mouseleave").pipe(m(()=>!1))).pipe(t?Ht(r=>Me(+!r*t)):le,Q(e.matches(":hover"))))}function Bo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Bo(e,r)}function x(e,t,...r){let o=document.createElement(e);if(t)for(let n of Object.keys(t))typeof t[n]!="undefined"&&(typeof t[n]!="boolean"?o.setAttribute(n,t[n]):o.setAttribute(n,""));for(let n of r)Bo(o,n);return o}function sr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function wt(e){let t=x("script",{src:e});return C(()=>(document.head.appendChild(t),S(d(t,"load"),d(t,"error").pipe(v(()=>$r(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),L(()=>document.head.removeChild(t)),Te(1))))}var Go=new g,ya=C(()=>typeof ResizeObserver=="undefined"?wt("https://unpkg.com/resize-observer-polyfill"):I(void 0)).pipe(m(()=>new ResizeObserver(e=>e.forEach(t=>Go.next(t)))),v(e=>S(Ke,I(e)).pipe(L(()=>e.disconnect()))),G(1));function ce(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){let t=e;for(;t.clientWidth===0&&t.parentElement;)t=t.parentElement;return ya.pipe(E(r=>r.observe(t)),v(r=>Go.pipe(b(o=>o.target===t),L(()=>r.unobserve(t)))),m(()=>ce(e)),Q(ce(e)))}function Tt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}function Jo(e){let t=[],r=e.parentElement;for(;r;)(e.clientWidth>r.clientWidth||e.clientHeight>r.clientHeight)&&t.push(r),r=(e=r).parentElement;return t.length===0&&t.push(document.documentElement),t}function Ue(e){return{x:e.offsetLeft,y:e.offsetTop}}function Xo(e){let t=e.getBoundingClientRect();return{x:t.x+window.scrollX,y:t.y+window.scrollY}}function Zo(e){return S(d(window,"load"),d(window,"resize")).pipe(Le(0,me),m(()=>Ue(e)),Q(Ue(e)))}function pr(e){return{x:e.scrollLeft,y:e.scrollTop}}function De(e){return S(d(e,"scroll"),d(window,"scroll"),d(window,"resize")).pipe(Le(0,me),m(()=>pr(e)),Q(pr(e)))}var en=new g,Ea=C(()=>I(new IntersectionObserver(e=>{for(let t of e)en.next(t)},{threshold:0}))).pipe(v(e=>S(Ke,I(e)).pipe(L(()=>e.disconnect()))),G(1));function tt(e){return Ea.pipe(E(t=>t.observe(e)),v(t=>en.pipe(b(({target:r})=>r===e),L(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function tn(e,t=16){return De(e).pipe(m(({y:r})=>{let o=ce(e),n=Tt(e);return r>=n.height-o.height-t}),K())}var lr={drawer:P("[data-md-toggle=drawer]"),search:P("[data-md-toggle=search]")};function rn(e){return lr[e].checked}function Je(e,t){lr[e].checked!==t&&lr[e].click()}function Ve(e){let t=lr[e];return d(t,"change").pipe(m(()=>t.checked),Q(t.checked))}function wa(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ta(){return S(d(window,"compositionstart").pipe(m(()=>!0)),d(window,"compositionend").pipe(m(()=>!1))).pipe(Q(!1))}function on(){let e=d(window,"keydown").pipe(b(t=>!(t.metaKey||t.ctrlKey)),m(t=>({mode:rn("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),b(({mode:t,type:r})=>{if(t==="global"){let o=Re();if(typeof o!="undefined")return!wa(o,r)}return!0}),pe());return Ta().pipe(v(t=>t?O:e))}function xe(){return new URL(location.href)}function pt(e,t=!1){if(B("navigation.instant")&&!t){let r=x("a",{href:e.href});document.body.appendChild(r),r.click(),r.remove()}else location.href=e.href}function nn(){return new g}function an(){return location.hash.slice(1)}function sn(e){let t=x("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Sa(e){return S(d(window,"hashchange"),e).pipe(m(an),Q(an()),b(t=>t.length>0),G(1))}function cn(e){return Sa(e).pipe(m(t=>fe(`[id="${t}"]`)),b(t=>typeof t!="undefined"))}function $t(e){let t=matchMedia(e);return ar(r=>t.addListener(()=>r(t.matches))).pipe(Q(t.matches))}function pn(){let e=matchMedia("print");return S(d(window,"beforeprint").pipe(m(()=>!0)),d(window,"afterprint").pipe(m(()=>!1))).pipe(Q(e.matches))}function Nr(e,t){return e.pipe(v(r=>r?t():O))}function zr(e,t){return new F(r=>{let o=new XMLHttpRequest;return o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(r.next(o.response),r.complete()):r.error(new Error(o.statusText))}),o.addEventListener("error",()=>{r.error(new Error("Network error"))}),o.addEventListener("abort",()=>{r.complete()}),typeof(t==null?void 0:t.progress$)!="undefined"&&(o.addEventListener("progress",n=>{var i;if(n.lengthComputable)t.progress$.next(n.loaded/n.total*100);else{let a=(i=o.getResponseHeader("Content-Length"))!=null?i:0;t.progress$.next(n.loaded/+a*100)}}),t.progress$.next(5)),o.send(),()=>o.abort()})}function Ne(e,t){return zr(e,t).pipe(v(r=>r.text()),m(r=>JSON.parse(r)),G(1))}function ln(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/html")),G(1))}function mn(e,t){let r=new DOMParser;return zr(e,t).pipe(v(o=>o.text()),m(o=>r.parseFromString(o,"text/xml")),G(1))}function fn(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function un(){return S(d(window,"scroll",{passive:!0}),d(window,"resize",{passive:!0})).pipe(m(fn),Q(fn()))}function dn(){return{width:innerWidth,height:innerHeight}}function hn(){return d(window,"resize",{passive:!0}).pipe(m(dn),Q(dn()))}function bn(){return z([un(),hn()]).pipe(m(([e,t])=>({offset:e,size:t})),G(1))}function mr(e,{viewport$:t,header$:r}){let o=t.pipe(Z("size")),n=z([o,r]).pipe(m(()=>Ue(e)));return z([r,t,n]).pipe(m(([{height:i},{offset:a,size:s},{x:p,y:c}])=>({offset:{x:a.x-p,y:a.y-c+i},size:s})))}function Oa(e){return d(e,"message",t=>t.data)}function Ma(e){let t=new g;return t.subscribe(r=>e.postMessage(r)),t}function vn(e,t=new Worker(e)){let r=Oa(t),o=Ma(t),n=new g;n.subscribe(o);let i=o.pipe(X(),ne(!0));return n.pipe(X(),Pe(r.pipe(U(i))),pe())}var La=P("#__config"),St=JSON.parse(La.textContent);St.base=`${new URL(St.base,xe())}`;function ye(){return St}function B(e){return St.features.includes(e)}function Ee(e,t){return typeof t!="undefined"?St.translations[e].replace("#",t.toString()):St.translations[e]}function Se(e,t=document){return P(`[data-md-component=${e}]`,t)}function ae(e,t=document){return $(`[data-md-component=${e}]`,t)}function _a(e){let t=P(".md-typeset > :first-child",e);return d(t,"click",{once:!0}).pipe(m(()=>P(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function gn(e){if(!B("announce.dismiss")||!e.childElementCount)return O;if(!e.hidden){let t=P(".md-typeset",e);__md_hash(t.innerHTML)===__md_get("__announce")&&(e.hidden=!0)}return C(()=>{let t=new g;return t.subscribe(({hash:r})=>{e.hidden=!0,__md_set("__announce",r)}),_a(e).pipe(E(r=>t.next(r)),L(()=>t.complete()),m(r=>R({ref:e},r)))})}function Aa(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function xn(e,t){let r=new g;return r.subscribe(({hidden:o})=>{e.hidden=o}),Aa(e,t).pipe(E(o=>r.next(o)),L(()=>r.complete()),m(o=>R({ref:e},o)))}function Pt(e,t){return t==="inline"?x("div",{class:"md-tooltip md-tooltip--inline",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"})):x("div",{class:"md-tooltip",id:e,role:"tooltip"},x("div",{class:"md-tooltip__inner md-typeset"}))}function yn(...e){return x("div",{class:"md-tooltip2",role:"tooltip"},x("div",{class:"md-tooltip2__inner md-typeset"},e))}function En(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return x("aside",{class:"md-annotation",tabIndex:0},Pt(t),x("a",{href:r,class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}else return x("aside",{class:"md-annotation",tabIndex:0},Pt(t),x("span",{class:"md-annotation__index",tabIndex:-1},x("span",{"data-md-annotation-id":e})))}function wn(e){return x("button",{class:"md-clipboard md-icon",title:Ee("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function qr(e,t){let r=t&2,o=t&1,n=Object.keys(e.terms).filter(p=>!e.terms[p]).reduce((p,c)=>[...p,x("del",null,c)," "],[]).slice(0,-1),i=ye(),a=new URL(e.location,i.base);B("search.highlight")&&a.searchParams.set("h",Object.entries(e.terms).filter(([,p])=>p).reduce((p,[c])=>`${p} ${c}`.trim(),""));let{tags:s}=ye();return x("a",{href:`${a}`,class:"md-search-result__link",tabIndex:-1},x("article",{class:"md-search-result__article md-typeset","data-md-score":e.score.toFixed(2)},r>0&&x("div",{class:"md-search-result__icon md-icon"}),r>0&&x("h1",null,e.title),r<=0&&x("h2",null,e.title),o>0&&e.text.length>0&&e.text,e.tags&&e.tags.map(p=>{let c=s?p in s?`md-tag-icon md-tag--${s[p]}`:"md-tag-icon":"";return x("span",{class:`md-tag ${c}`},p)}),o>0&&n.length>0&&x("p",{class:"md-search-result__terms"},Ee("search.result.term.missing"),": ",...n)))}function Tn(e){let t=e[0].score,r=[...e],o=ye(),n=r.findIndex(l=>!`${new URL(l.location,o.base)}`.includes("#")),[i]=r.splice(n,1),a=r.findIndex(l=>l.scoreqr(l,1)),...p.length?[x("details",{class:"md-search-result__more"},x("summary",{tabIndex:-1},x("div",null,p.length>0&&p.length===1?Ee("search.result.more.one"):Ee("search.result.more.other",p.length))),...p.map(l=>qr(l,1)))]:[]];return x("li",{class:"md-search-result__item"},c)}function Sn(e){return x("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>x("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?sr(r):r)))}function Qr(e){let t=`tabbed-control tabbed-control--${e}`;return x("div",{class:t,hidden:!0},x("button",{class:"tabbed-button",tabIndex:-1,"aria-hidden":"true"}))}function On(e){return x("div",{class:"md-typeset__scrollwrap"},x("div",{class:"md-typeset__table"},e))}function Ca(e){var o;let t=ye(),r=new URL(`../${e.version}/`,t.base);return x("li",{class:"md-version__item"},x("a",{href:`${r}`,class:"md-version__link"},e.title,((o=t.version)==null?void 0:o.alias)&&e.aliases.length>0&&x("span",{class:"md-version__alias"},e.aliases[0])))}function Mn(e,t){var o;let r=ye();return e=e.filter(n=>{var i;return!((i=n.properties)!=null&&i.hidden)}),x("div",{class:"md-version"},x("button",{class:"md-version__current","aria-label":Ee("select.version")},t.title,((o=r.version)==null?void 0:o.alias)&&t.aliases.length>0&&x("span",{class:"md-version__alias"},t.aliases[0])),x("ul",{class:"md-version__list"},e.map(Ca)))}var Ha=0;function ka(e){let t=z([et(e),kt(e)]).pipe(m(([o,n])=>o||n),K()),r=C(()=>Jo(e)).pipe(oe(De),ct(1),m(()=>Xo(e)));return t.pipe(Ae(o=>o),v(()=>z([t,r])),m(([o,n])=>({active:o,offset:n})),pe())}function $a(e,t){let{content$:r,viewport$:o}=t,n=`__tooltip2_${Ha++}`;return C(()=>{let i=new g,a=new _r(!1);i.pipe(X(),ne(!1)).subscribe(a);let s=a.pipe(Ht(c=>Me(+!c*250,Hr)),K(),v(c=>c?r:O),E(c=>c.id=n),pe());z([i.pipe(m(({active:c})=>c)),s.pipe(v(c=>kt(c,250)),Q(!1))]).pipe(m(c=>c.some(l=>l))).subscribe(a);let p=a.pipe(b(c=>c),ee(s,o),m(([c,l,{size:f}])=>{let u=e.getBoundingClientRect(),h=u.width/2;if(l.role==="tooltip")return{x:h,y:8+u.height};if(u.y>=f.height/2){let{height:w}=ce(l);return{x:h,y:-16-w}}else return{x:h,y:16+u.height}}));return z([s,i,p]).subscribe(([c,{offset:l},f])=>{c.style.setProperty("--md-tooltip-host-x",`${l.x}px`),c.style.setProperty("--md-tooltip-host-y",`${l.y}px`),c.style.setProperty("--md-tooltip-x",`${f.x}px`),c.style.setProperty("--md-tooltip-y",`${f.y}px`),c.classList.toggle("md-tooltip2--top",f.y<0),c.classList.toggle("md-tooltip2--bottom",f.y>=0)}),a.pipe(b(c=>c),ee(s,(c,l)=>l),b(c=>c.role==="tooltip")).subscribe(c=>{let l=ce(P(":scope > *",c));c.style.setProperty("--md-tooltip-width",`${l.width}px`),c.style.setProperty("--md-tooltip-tail","0px")}),a.pipe(K(),be(me),ee(s)).subscribe(([c,l])=>{l.classList.toggle("md-tooltip2--active",c)}),z([a.pipe(b(c=>c)),s]).subscribe(([c,l])=>{l.role==="dialog"?(e.setAttribute("aria-controls",n),e.setAttribute("aria-haspopup","dialog")):e.setAttribute("aria-describedby",n)}),a.pipe(b(c=>!c)).subscribe(()=>{e.removeAttribute("aria-controls"),e.removeAttribute("aria-describedby"),e.removeAttribute("aria-haspopup")}),ka(e).pipe(E(c=>i.next(c)),L(()=>i.complete()),m(c=>R({ref:e},c)))})}function lt(e,{viewport$:t},r=document.body){return $a(e,{content$:new F(o=>{let n=e.title,i=yn(n);return o.next(i),e.removeAttribute("title"),r.append(i),()=>{i.remove(),e.setAttribute("title",n)}}),viewport$:t})}function Pa(e,t){let r=C(()=>z([Zo(e),De(t)])).pipe(m(([{x:o,y:n},i])=>{let{width:a,height:s}=ce(e);return{x:o-i.x+a/2,y:n-i.y+s/2}}));return et(e).pipe(v(o=>r.pipe(m(n=>({active:o,offset:n})),Te(+!o||1/0))))}function Ln(e,t,{target$:r}){let[o,n]=Array.from(e.children);return C(()=>{let i=new g,a=i.pipe(X(),ne(!0));return i.subscribe({next({offset:s}){e.style.setProperty("--md-tooltip-x",`${s.x}px`),e.style.setProperty("--md-tooltip-y",`${s.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),tt(e).pipe(U(a)).subscribe(s=>{e.toggleAttribute("data-md-visible",s)}),S(i.pipe(b(({active:s})=>s)),i.pipe(_e(250),b(({active:s})=>!s))).subscribe({next({active:s}){s?e.prepend(o):o.remove()},complete(){e.prepend(o)}}),i.pipe(Le(16,me)).subscribe(({active:s})=>{o.classList.toggle("md-tooltip--active",s)}),i.pipe(ct(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:s})=>s)).subscribe({next(s){s?e.style.setProperty("--md-tooltip-0",`${-s}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),d(n,"click").pipe(U(a),b(s=>!(s.metaKey||s.ctrlKey))).subscribe(s=>{s.stopPropagation(),s.preventDefault()}),d(n,"mousedown").pipe(U(a),ee(i)).subscribe(([s,{active:p}])=>{var c;if(s.button!==0||s.metaKey||s.ctrlKey)s.preventDefault();else if(p){s.preventDefault();let l=e.parentElement.closest(".md-annotation");l instanceof HTMLElement?l.focus():(c=Re())==null||c.blur()}}),r.pipe(U(a),b(s=>s===o),Ge(125)).subscribe(()=>e.focus()),Pa(e,t).pipe(E(s=>i.next(s)),L(()=>i.complete()),m(s=>R({ref:e},s)))})}function Ra(e){return e.tagName==="CODE"?$(".c, .c1, .cm",e):[e]}function Ia(e){let t=[];for(let r of Ra(e)){let o=[],n=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=n.nextNode();i;i=n.nextNode())o.push(i);for(let i of o){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,s,p]=a;if(typeof p=="undefined"){let c=i.splitText(a.index);i=c.splitText(s.length),t.push(c)}else{i.textContent=s,t.push(i);break}}}}return t}function _n(e,t){t.append(...Array.from(e.childNodes))}function fr(e,t,{target$:r,print$:o}){let n=t.closest("[id]"),i=n==null?void 0:n.id,a=new Map;for(let s of Ia(t)){let[,p]=s.textContent.match(/\((\d+)\)/);fe(`:scope > li:nth-child(${p})`,e)&&(a.set(p,En(p,i)),s.replaceWith(a.get(p)))}return a.size===0?O:C(()=>{let s=new g,p=s.pipe(X(),ne(!0)),c=[];for(let[l,f]of a)c.push([P(".md-typeset",f),P(`:scope > li:nth-child(${l})`,e)]);return o.pipe(U(p)).subscribe(l=>{e.hidden=!l,e.classList.toggle("md-annotation-list",l);for(let[f,u]of c)l?_n(f,u):_n(u,f)}),S(...[...a].map(([,l])=>Ln(l,t,{target$:r}))).pipe(L(()=>s.complete()),pe())})}function An(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return An(t)}}function Cn(e,t){return C(()=>{let r=An(e);return typeof r!="undefined"?fr(r,e,t):O})}var Hn=Vt(Yr());var Fa=0;function kn(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return kn(t)}}function ja(e){return ge(e).pipe(m(({width:t})=>({scrollable:Tt(e).width>t})),Z("scrollable"))}function $n(e,t){let{matches:r}=matchMedia("(hover)"),o=C(()=>{let n=new g,i=n.pipe(Fr(1));n.subscribe(({scrollable:c})=>{c&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")});let a=[];if(Hn.default.isSupported()&&(e.closest(".copy")||B("content.code.copy")&&!e.closest(".no-copy"))){let c=e.closest("pre");c.id=`__code_${Fa++}`;let l=wn(c.id);c.insertBefore(l,e),B("content.tooltips")&&a.push(lt(l,{viewport$}))}let s=e.closest(".highlight");if(s instanceof HTMLElement){let c=kn(s);if(typeof c!="undefined"&&(s.classList.contains("annotate")||B("content.code.annotate"))){let l=fr(c,e,t);a.push(ge(s).pipe(U(i),m(({width:f,height:u})=>f&&u),K(),v(f=>f?l:O)))}}return $(":scope > span[id]",e).length&&e.classList.add("md-code__content"),ja(e).pipe(E(c=>n.next(c)),L(()=>n.complete()),m(c=>R({ref:e},c)),Pe(...a))});return B("content.lazy")?tt(e).pipe(b(n=>n),Te(1),v(()=>o)):o}function Wa(e,{target$:t,print$:r}){let o=!0;return S(t.pipe(m(n=>n.closest("details:not([open])")),b(n=>e===n),m(()=>({action:"open",reveal:!0}))),r.pipe(b(n=>n||!o),E(()=>o=e.open),m(n=>({action:n?"open":"close"}))))}function Pn(e,t){return C(()=>{let r=new g;return r.subscribe(({action:o,reveal:n})=>{e.toggleAttribute("open",o==="open"),n&&e.scrollIntoView()}),Wa(e,t).pipe(E(o=>r.next(o)),L(()=>r.complete()),m(o=>R({ref:e},o)))})}var Rn=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color);stroke-width:.05rem}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}g #flowchart-circleEnd,g #flowchart-circleStart,g #flowchart-crossEnd,g #flowchart-crossStart,g #flowchart-pointEnd,g #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel,.nodeLabel p{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}a .nodeLabel{text-decoration:underline}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.attributeBoxEven,.attributeBoxOdd{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{fill:var(--md-mermaid-sequence-actor-bg-color);stroke:var(--md-mermaid-sequence-actor-border-color)}text.actor>tspan{fill:var(--md-mermaid-sequence-actor-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-mermaid-sequence-actor-line-color)}.actor-man circle,.actor-man line{fill:var(--md-mermaid-sequence-actorman-bg-color);stroke:var(--md-mermaid-sequence-actorman-line-color)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-sequence-message-line-color)}.note{fill:var(--md-mermaid-sequence-note-bg-color);stroke:var(--md-mermaid-sequence-note-border-color)}.loopText,.loopText>tspan,.messageText,.noteText>tspan{stroke:none;font-family:var(--md-mermaid-font-family)!important}.messageText{fill:var(--md-mermaid-sequence-message-fg-color)}.loopText,.loopText>tspan{fill:var(--md-mermaid-sequence-loop-fg-color)}.noteText>tspan{fill:var(--md-mermaid-sequence-note-fg-color)}#arrowhead path{fill:var(--md-mermaid-sequence-message-line-color);stroke:none}.loopLine{fill:var(--md-mermaid-sequence-loop-bg-color);stroke:var(--md-mermaid-sequence-loop-border-color)}.labelBox{fill:var(--md-mermaid-sequence-label-bg-color);stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-sequence-label-fg-color);font-family:var(--md-mermaid-font-family)}.sequenceNumber{fill:var(--md-mermaid-sequence-number-fg-color)}rect.rect{fill:var(--md-mermaid-sequence-box-bg-color);stroke:none}rect.rect+text.text{fill:var(--md-mermaid-sequence-box-fg-color)}defs #sequencenumber{fill:var(--md-mermaid-sequence-number-bg-color)!important}";var Br,Da=0;function Va(){return typeof mermaid=="undefined"||mermaid instanceof Element?wt("https://unpkg.com/mermaid@10/dist/mermaid.min.js"):I(void 0)}function In(e){return e.classList.remove("mermaid"),Br||(Br=Va().pipe(E(()=>mermaid.initialize({startOnLoad:!1,themeCSS:Rn,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),G(1))),Br.subscribe(()=>ao(this,null,function*(){e.classList.add("mermaid");let t=`__mermaid_${Da++}`,r=x("div",{class:"mermaid"}),o=e.textContent,{svg:n,fn:i}=yield mermaid.render(t,o),a=r.attachShadow({mode:"closed"});a.innerHTML=n,e.replaceWith(r),i==null||i(a)})),Br.pipe(m(()=>({ref:e})))}var Fn=x("table");function jn(e){return e.replaceWith(Fn),Fn.replaceWith(On(e)),I({ref:e})}function Na(e){let t=e.find(r=>r.checked)||e[0];return S(...e.map(r=>d(r,"change").pipe(m(()=>P(`label[for="${r.id}"]`))))).pipe(Q(P(`label[for="${t.id}"]`)),m(r=>({active:r})))}function Wn(e,{viewport$:t,target$:r}){let o=P(".tabbed-labels",e),n=$(":scope > input",e),i=Qr("prev");e.append(i);let a=Qr("next");return e.append(a),C(()=>{let s=new g,p=s.pipe(X(),ne(!0));z([s,ge(e),tt(e)]).pipe(U(p),Le(1,me)).subscribe({next([{active:c},l]){let f=Ue(c),{width:u}=ce(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let h=pr(o);(f.xh.x+l.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),z([De(o),ge(o)]).pipe(U(p)).subscribe(([c,l])=>{let f=Tt(o);i.hidden=c.x<16,a.hidden=c.x>f.width-l.width-16}),S(d(i,"click").pipe(m(()=>-1)),d(a,"click").pipe(m(()=>1))).pipe(U(p)).subscribe(c=>{let{width:l}=ce(o);o.scrollBy({left:l*c,behavior:"smooth"})}),r.pipe(U(p),b(c=>n.includes(c))).subscribe(c=>c.click()),o.classList.add("tabbed-labels--linked");for(let c of n){let l=P(`label[for="${c.id}"]`);l.replaceChildren(x("a",{href:`#${l.htmlFor}`,tabIndex:-1},...Array.from(l.childNodes))),d(l.firstElementChild,"click").pipe(U(p),b(f=>!(f.metaKey||f.ctrlKey)),E(f=>{f.preventDefault(),f.stopPropagation()})).subscribe(()=>{history.replaceState({},"",`#${l.htmlFor}`),l.click()})}return B("content.tabs.link")&&s.pipe(Ce(1),ee(t)).subscribe(([{active:c},{offset:l}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-l.y;for(let w of $("[data-tabs]"))for(let A of $(":scope > input",w)){let te=P(`label[for="${A.id}"]`);if(te!==c&&te.innerText.trim()===f){te.setAttribute("data-md-switching",""),A.click();break}}window.scrollTo({top:e.offsetTop-u});let h=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...h])])}}),s.pipe(U(p)).subscribe(()=>{for(let c of $("audio, video",e))c.pause()}),Na(n).pipe(E(c=>s.next(c)),L(()=>s.complete()),m(c=>R({ref:e},c)))}).pipe(Qe(se))}function Un(e,{viewport$:t,target$:r,print$:o}){return S(...$(".annotate:not(.highlight)",e).map(n=>Cn(n,{target$:r,print$:o})),...$("pre:not(.mermaid) > code",e).map(n=>$n(n,{target$:r,print$:o})),...$("pre.mermaid",e).map(n=>In(n)),...$("table:not([class])",e).map(n=>jn(n)),...$("details",e).map(n=>Pn(n,{target$:r,print$:o})),...$("[data-tabs]",e).map(n=>Wn(n,{viewport$:t,target$:r})),...$("[title]",e).filter(()=>B("content.tooltips")).map(n=>lt(n,{viewport$:t})))}function za(e,{alert$:t}){return t.pipe(v(r=>S(I(!0),I(!1).pipe(Ge(2e3))).pipe(m(o=>({message:r,active:o})))))}function Dn(e,t){let r=P(".md-typeset",e);return C(()=>{let o=new g;return o.subscribe(({message:n,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=n}),za(e,t).pipe(E(n=>o.next(n)),L(()=>o.complete()),m(n=>R({ref:e},n)))})}var qa=0;function Qa(e,t){document.body.append(e);let{width:r}=ce(e);e.style.setProperty("--md-tooltip-width",`${r}px`),e.remove();let o=cr(t),n=typeof o!="undefined"?De(o):I({x:0,y:0}),i=S(et(t),kt(t)).pipe(K());return z([i,n]).pipe(m(([a,s])=>{let{x:p,y:c}=Ue(t),l=ce(t),f=t.closest("table");return f&&t.parentElement&&(p+=f.offsetLeft+t.parentElement.offsetLeft,c+=f.offsetTop+t.parentElement.offsetTop),{active:a,offset:{x:p-s.x+l.width/2-r/2,y:c-s.y+l.height+8}}}))}function Vn(e){let t=e.title;if(!t.length)return O;let r=`__tooltip_${qa++}`,o=Pt(r,"inline"),n=P(".md-typeset",o);return n.innerHTML=t,C(()=>{let i=new g;return i.subscribe({next({offset:a}){o.style.setProperty("--md-tooltip-x",`${a.x}px`),o.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){o.style.removeProperty("--md-tooltip-x"),o.style.removeProperty("--md-tooltip-y")}}),S(i.pipe(b(({active:a})=>a)),i.pipe(_e(250),b(({active:a})=>!a))).subscribe({next({active:a}){a?(e.insertAdjacentElement("afterend",o),e.setAttribute("aria-describedby",r),e.removeAttribute("title")):(o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t))},complete(){o.remove(),e.removeAttribute("aria-describedby"),e.setAttribute("title",t)}}),i.pipe(Le(16,me)).subscribe(({active:a})=>{o.classList.toggle("md-tooltip--active",a)}),i.pipe(ct(125,me),b(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?o.style.setProperty("--md-tooltip-0",`${-a}px`):o.style.removeProperty("--md-tooltip-0")},complete(){o.style.removeProperty("--md-tooltip-0")}}),Qa(o,e).pipe(E(a=>i.next(a)),L(()=>i.complete()),m(a=>R({ref:e},a)))}).pipe(Qe(se))}function Ka({viewport$:e}){if(!B("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:n}})=>n),Ye(2,1),m(([n,i])=>[nMath.abs(i-n.y)>100),m(([,[n]])=>n),K()),o=Ve("search");return z([e,o]).pipe(m(([{offset:n},i])=>n.y>400&&!i),K(),v(n=>n?r:I(!1)),Q(!1))}function Nn(e,t){return C(()=>z([ge(e),Ka(t)])).pipe(m(([{height:r},o])=>({height:r,hidden:o})),K((r,o)=>r.height===o.height&&r.hidden===o.hidden),G(1))}function zn(e,{header$:t,main$:r}){return C(()=>{let o=new g,n=o.pipe(X(),ne(!0));o.pipe(Z("active"),We(t)).subscribe(([{active:a},{hidden:s}])=>{e.classList.toggle("md-header--shadow",a&&!s),e.hidden=s});let i=ue($("[title]",e)).pipe(b(()=>B("content.tooltips")),oe(a=>Vn(a)));return r.subscribe(o),t.pipe(U(n),m(a=>R({ref:e},a)),Pe(i.pipe(U(n))))})}function Ya(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:o}})=>{let{height:n}=ce(e);return{active:o>=n}}),Z("active"))}function qn(e,t){return C(()=>{let r=new g;r.subscribe({next({active:n}){e.classList.toggle("md-header__title--active",n)},complete(){e.classList.remove("md-header__title--active")}});let o=fe(".md-content h1");return typeof o=="undefined"?O:Ya(o,t).pipe(E(n=>r.next(n)),L(()=>r.complete()),m(n=>R({ref:e},n)))})}function Qn(e,{viewport$:t,header$:r}){let o=r.pipe(m(({height:i})=>i),K()),n=o.pipe(v(()=>ge(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),Z("bottom"))));return z([o,n,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:p},size:{height:c}}])=>(c=Math.max(0,c-Math.max(0,a-p,i)-Math.max(0,c+p-s)),{offset:a-i,height:c,active:a-i<=p})),K((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function Ba(e){let t=__md_get("__palette")||{index:e.findIndex(o=>matchMedia(o.getAttribute("data-md-color-media")).matches)},r=Math.max(0,Math.min(t.index,e.length-1));return I(...e).pipe(oe(o=>d(o,"change").pipe(m(()=>o))),Q(e[r]),m(o=>({index:e.indexOf(o),color:{media:o.getAttribute("data-md-color-media"),scheme:o.getAttribute("data-md-color-scheme"),primary:o.getAttribute("data-md-color-primary"),accent:o.getAttribute("data-md-color-accent")}})),G(1))}function Kn(e){let t=$("input",e),r=x("meta",{name:"theme-color"});document.head.appendChild(r);let o=x("meta",{name:"color-scheme"});document.head.appendChild(o);let n=$t("(prefers-color-scheme: light)");return C(()=>{let i=new g;return i.subscribe(a=>{if(document.body.setAttribute("data-md-color-switching",""),a.color.media==="(prefers-color-scheme)"){let s=matchMedia("(prefers-color-scheme: light)"),p=document.querySelector(s.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");a.color.scheme=p.getAttribute("data-md-color-scheme"),a.color.primary=p.getAttribute("data-md-color-primary"),a.color.accent=p.getAttribute("data-md-color-accent")}for(let[s,p]of Object.entries(a.color))document.body.setAttribute(`data-md-color-${s}`,p);for(let s=0;sa.key==="Enter"),ee(i,(a,s)=>s)).subscribe(({index:a})=>{a=(a+1)%t.length,t[a].click(),t[a].focus()}),i.pipe(m(()=>{let a=Se("header"),s=window.getComputedStyle(a);return o.content=s.colorScheme,s.backgroundColor.match(/\d+/g).map(p=>(+p).toString(16).padStart(2,"0")).join("")})).subscribe(a=>r.content=`#${a}`),i.pipe(be(se)).subscribe(()=>{document.body.removeAttribute("data-md-color-switching")}),Ba(t).pipe(U(n.pipe(Ce(1))),st(),E(a=>i.next(a)),L(()=>i.complete()),m(a=>R({ref:e},a)))})}function Yn(e,{progress$:t}){return C(()=>{let r=new g;return r.subscribe(({value:o})=>{e.style.setProperty("--md-progress-value",`${o}`)}),t.pipe(E(o=>r.next({value:o})),L(()=>r.complete()),m(o=>({ref:e,value:o})))})}var Gr=Vt(Yr());function Ga(e){e.setAttribute("data-md-copying","");let t=e.closest("[data-copy]"),r=t?t.getAttribute("data-copy"):e.innerText;return e.removeAttribute("data-md-copying"),r.trimEnd()}function Bn({alert$:e}){Gr.default.isSupported()&&new F(t=>{new Gr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||Ga(P(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(E(t=>{t.trigger.focus()}),m(()=>Ee("clipboard.copied"))).subscribe(e)}function Gn(e,t){return e.protocol=t.protocol,e.hostname=t.hostname,e}function Ja(e,t){let r=new Map;for(let o of $("url",e)){let n=P("loc",o),i=[Gn(new URL(n.textContent),t)];r.set(`${i[0]}`,i);for(let a of $("[rel=alternate]",o)){let s=a.getAttribute("href");s!=null&&i.push(Gn(new URL(s),t))}}return r}function ur(e){return mn(new URL("sitemap.xml",e)).pipe(m(t=>Ja(t,new URL(e))),ve(()=>I(new Map)))}function Xa(e,t){if(!(e.target instanceof Element))return O;let r=e.target.closest("a");if(r===null)return O;if(r.target||e.metaKey||e.ctrlKey)return O;let o=new URL(r.href);return o.search=o.hash="",t.has(`${o}`)?(e.preventDefault(),I(new URL(r.href))):O}function Jn(e){let t=new Map;for(let r of $(":scope > *",e.head))t.set(r.outerHTML,r);return t}function Xn(e){for(let t of $("[href], [src]",e))for(let r of["href","src"]){let o=t.getAttribute(r);if(o&&!/^(?:[a-z]+:)?\/\//i.test(o)){t[r]=t[r];break}}return I(e)}function Za(e){for(let o of["[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...B("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let n=fe(o),i=fe(o,e);typeof n!="undefined"&&typeof i!="undefined"&&n.replaceWith(i)}let t=Jn(document);for(let[o,n]of Jn(e))t.has(o)?t.delete(o):document.head.appendChild(n);for(let o of t.values()){let n=o.getAttribute("name");n!=="theme-color"&&n!=="color-scheme"&&o.remove()}let r=Se("container");return je($("script",r)).pipe(v(o=>{let n=e.createElement("script");if(o.src){for(let i of o.getAttributeNames())n.setAttribute(i,o.getAttribute(i));return o.replaceWith(n),new F(i=>{n.onload=()=>i.complete()})}else return n.textContent=o.textContent,o.replaceWith(n),O}),X(),ne(document))}function Zn({location$:e,viewport$:t,progress$:r}){let o=ye();if(location.protocol==="file:")return O;let n=ur(o.base);I(document).subscribe(Xn);let i=d(document.body,"click").pipe(We(n),v(([p,c])=>Xa(p,c)),pe()),a=d(window,"popstate").pipe(m(xe),pe());i.pipe(ee(t)).subscribe(([p,{offset:c}])=>{history.replaceState(c,""),history.pushState(null,"",p)}),S(i,a).subscribe(e);let s=e.pipe(Z("pathname"),v(p=>ln(p,{progress$:r}).pipe(ve(()=>(pt(p,!0),O)))),v(Xn),v(Za),pe());return S(s.pipe(ee(e,(p,c)=>c)),s.pipe(v(()=>e),Z("pathname"),v(()=>e),Z("hash")),e.pipe(K((p,c)=>p.pathname===c.pathname&&p.hash===c.hash),v(()=>i),E(()=>history.back()))).subscribe(p=>{var c,l;history.state!==null||!p.hash?window.scrollTo(0,(l=(c=history.state)==null?void 0:c.y)!=null?l:0):(history.scrollRestoration="auto",sn(p.hash),history.scrollRestoration="manual")}),e.subscribe(()=>{history.scrollRestoration="manual"}),d(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}),t.pipe(Z("offset"),_e(100)).subscribe(({offset:p})=>{history.replaceState(p,"")}),s}var ri=Vt(ti());function oi(e){let t=e.separator.split("|").map(n=>n.replace(/(\(\?[!=<][^)]+\))/g,"").length===0?"\uFFFD":n).join("|"),r=new RegExp(t,"img"),o=(n,i,a)=>`${i}${a}`;return n=>{n=n.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator}|)(${n.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(0,ri.default)(a).replace(i,o).replace(/<\/mark>(\s+)]*>/img,"$1")}}function It(e){return e.type===1}function dr(e){return e.type===3}function ni(e,t){let r=vn(e);return S(I(location.protocol!=="file:"),Ve("search")).pipe(Ae(o=>o),v(()=>t)).subscribe(({config:o,docs:n})=>r.next({type:0,data:{config:o,docs:n,options:{suggest:B("search.suggest")}}})),r}function ii({document$:e}){let t=ye(),r=Ne(new URL("../versions.json",t.base)).pipe(ve(()=>O)),o=r.pipe(m(n=>{let[,i]=t.base.match(/([^/]+)\/?$/);return n.find(({version:a,aliases:s})=>a===i||s.includes(i))||n[0]}));r.pipe(m(n=>new Map(n.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),v(n=>d(document.body,"click").pipe(b(i=>!i.metaKey&&!i.ctrlKey),ee(o),v(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&n.has(s.href)){let p=s.href;return!i.target.closest(".md-version")&&n.get(p)===a?O:(i.preventDefault(),I(p))}}return O}),v(i=>ur(new URL(i)).pipe(m(a=>{let p=xe().href.replace(t.base,i);return a.has(p.split("#")[0])?new URL(p):new URL(i)})))))).subscribe(n=>pt(n,!0)),z([r,o]).subscribe(([n,i])=>{P(".md-header__topic").appendChild(Mn(n,i))}),e.pipe(v(()=>o)).subscribe(n=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){i=!0;let s=((a=t.version)==null?void 0:a.default)||"latest";Array.isArray(s)||(s=[s]);e:for(let p of s)for(let c of n.aliases.concat(n.version))if(new RegExp(p,"i").test(c)){i=!1;break e}__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ae("outdated"))s.hidden=!1})}function ns(e,{worker$:t}){let{searchParams:r}=xe();r.has("q")&&(Je("search",!0),e.value=r.get("q"),e.focus(),Ve("search").pipe(Ae(i=>!i)).subscribe(()=>{let i=xe();i.searchParams.delete("q"),history.replaceState({},"",`${i}`)}));let o=et(e),n=S(t.pipe(Ae(It)),d(e,"keyup"),o).pipe(m(()=>e.value),K());return z([n,o]).pipe(m(([i,a])=>({value:i,focus:a})),G(1))}function ai(e,{worker$:t}){let r=new g,o=r.pipe(X(),ne(!0));z([t.pipe(Ae(It)),r],(i,a)=>a).pipe(Z("value")).subscribe(({value:i})=>t.next({type:2,data:i})),r.pipe(Z("focus")).subscribe(({focus:i})=>{i&&Je("search",i)}),d(e.form,"reset").pipe(U(o)).subscribe(()=>e.focus());let n=P("header [for=__search]");return d(n,"click").subscribe(()=>e.focus()),ns(e,{worker$:t}).pipe(E(i=>r.next(i)),L(()=>r.complete()),m(i=>R({ref:e},i)),G(1))}function si(e,{worker$:t,query$:r}){let o=new g,n=tn(e.parentElement).pipe(b(Boolean)),i=e.parentElement,a=P(":scope > :first-child",e),s=P(":scope > :last-child",e);Ve("search").subscribe(l=>s.setAttribute("role",l?"list":"presentation")),o.pipe(ee(r),Ur(t.pipe(Ae(It)))).subscribe(([{items:l},{value:f}])=>{switch(l.length){case 0:a.textContent=f.length?Ee("search.result.none"):Ee("search.result.placeholder");break;case 1:a.textContent=Ee("search.result.one");break;default:let u=sr(l.length);a.textContent=Ee("search.result.other",u)}});let p=o.pipe(E(()=>s.innerHTML=""),v(({items:l})=>S(I(...l.slice(0,10)),I(...l.slice(10)).pipe(Ye(4),Vr(n),v(([f])=>f)))),m(Tn),pe());return p.subscribe(l=>s.appendChild(l)),p.pipe(oe(l=>{let f=fe("details",l);return typeof f=="undefined"?O:d(f,"toggle").pipe(U(o),m(()=>f))})).subscribe(l=>{l.open===!1&&l.offsetTop<=i.scrollTop&&i.scrollTo({top:l.offsetTop})}),t.pipe(b(dr),m(({data:l})=>l)).pipe(E(l=>o.next(l)),L(()=>o.complete()),m(l=>R({ref:e},l)))}function is(e,{query$:t}){return t.pipe(m(({value:r})=>{let o=xe();return o.hash="",r=r.replace(/\s+/g,"+").replace(/&/g,"%26").replace(/=/g,"%3D"),o.search=`q=${r}`,{url:o}}))}function ci(e,t){let r=new g,o=r.pipe(X(),ne(!0));return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),d(e,"click").pipe(U(o)).subscribe(n=>n.preventDefault()),is(e,t).pipe(E(n=>r.next(n)),L(()=>r.complete()),m(n=>R({ref:e},n)))}function pi(e,{worker$:t,keyboard$:r}){let o=new g,n=Se("search-query"),i=S(d(n,"keydown"),d(n,"focus")).pipe(be(se),m(()=>n.value),K());return o.pipe(We(i),m(([{suggest:s},p])=>{let c=p.split(/([\s-]+)/);if(s!=null&&s.length&&c[c.length-1]){let l=s[s.length-1];l.startsWith(c[c.length-1])&&(c[c.length-1]=l)}else c.length=0;return c})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(b(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&n.selectionStart===n.value.length&&(n.value=e.innerText);break}}),t.pipe(b(dr),m(({data:s})=>s)).pipe(E(s=>o.next(s)),L(()=>o.complete()),m(()=>({ref:e})))}function li(e,{index$:t,keyboard$:r}){let o=ye();try{let n=ni(o.search,t),i=Se("search-query",e),a=Se("search-result",e);d(e,"click").pipe(b(({target:p})=>p instanceof Element&&!!p.closest("a"))).subscribe(()=>Je("search",!1)),r.pipe(b(({mode:p})=>p==="search")).subscribe(p=>{let c=Re();switch(p.type){case"Enter":if(c===i){let l=new Map;for(let f of $(":first-child [href]",a)){let u=f.firstElementChild;l.set(f,parseFloat(u.getAttribute("data-md-score")))}if(l.size){let[[f]]=[...l].sort(([,u],[,h])=>h-u);f.click()}p.claim()}break;case"Escape":case"Tab":Je("search",!1),i.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")i.focus();else{let l=[i,...$(":not(details) > [href], summary, details[open] [href]",a)],f=Math.max(0,(Math.max(0,l.indexOf(c))+l.length+(p.type==="ArrowUp"?-1:1))%l.length);l[f].focus()}p.claim();break;default:i!==Re()&&i.focus()}}),r.pipe(b(({mode:p})=>p==="global")).subscribe(p=>{switch(p.type){case"f":case"s":case"/":i.focus(),i.select(),p.claim();break}});let s=ai(i,{worker$:n});return S(s,si(a,{worker$:n,query$:s})).pipe(Pe(...ae("search-share",e).map(p=>ci(p,{query$:s})),...ae("search-suggest",e).map(p=>pi(p,{worker$:n,keyboard$:r}))))}catch(n){return e.hidden=!0,Ke}}function mi(e,{index$:t,location$:r}){return z([t,r.pipe(Q(xe()),b(o=>!!o.searchParams.get("h")))]).pipe(m(([o,n])=>oi(o.config)(n.searchParams.get("h"))),m(o=>{var a;let n=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let p=s.textContent,c=o(p);c.length>p.length&&n.set(s,c)}for(let[s,p]of n){let{childNodes:c}=x("span",null,p);s.replaceWith(...Array.from(c))}return{ref:e,nodes:n}}))}function as(e,{viewport$:t,main$:r}){let o=e.closest(".md-grid"),n=o.offsetTop-o.parentElement.offsetTop;return z([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(n,Math.max(0,s-i))-n,{height:a,locked:s>=i+n})),K((i,a)=>i.height===a.height&&i.locked===a.locked))}function Jr(e,o){var n=o,{header$:t}=n,r=io(n,["header$"]);let i=P(".md-sidebar__scrollwrap",e),{y:a}=Ue(i);return C(()=>{let s=new g,p=s.pipe(X(),ne(!0)),c=s.pipe(Le(0,me));return c.pipe(ee(t)).subscribe({next([{height:l},{height:f}]){i.style.height=`${l-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ae()).subscribe(()=>{for(let l of $(".md-nav__link--active[href]",e)){if(!l.clientHeight)continue;let f=l.closest(".md-sidebar__scrollwrap");if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:h}=ce(f);f.scrollTo({top:u-h/2})}}}),ue($("label[tabindex]",e)).pipe(oe(l=>d(l,"click").pipe(be(se),m(()=>l),U(p)))).subscribe(l=>{let f=P(`[id="${l.htmlFor}"]`);P(`[aria-labelledby="${l.id}"]`).setAttribute("aria-expanded",`${f.checked}`)}),as(e,r).pipe(E(l=>s.next(l)),L(()=>s.complete()),m(l=>R({ref:e},l)))})}function fi(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Ct(Ne(`${r}/releases/latest`).pipe(ve(()=>O),m(o=>({version:o.tag_name})),Be({})),Ne(r).pipe(ve(()=>O),m(o=>({stars:o.stargazers_count,forks:o.forks_count})),Be({}))).pipe(m(([o,n])=>R(R({},o),n)))}else{let r=`https://api.github.com/users/${e}`;return Ne(r).pipe(m(o=>({repositories:o.public_repos})),Be({}))}}function ui(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return Ne(r).pipe(ve(()=>O),m(({star_count:o,forks_count:n})=>({stars:o,forks:n})),Be({}))}function di(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,o]=t;return fi(r,o)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,o]=t;return ui(r,o)}return O}var ss;function cs(e){return ss||(ss=C(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(ae("consent").length){let o=__md_get("__consent");if(!(o&&o.github))return O}return di(e.href).pipe(E(o=>__md_set("__source",o,sessionStorage)))}).pipe(ve(()=>O),b(t=>Object.keys(t).length>0),m(t=>({facts:t})),G(1)))}function hi(e){let t=P(":scope > :last-child",e);return C(()=>{let r=new g;return r.subscribe(({facts:o})=>{t.appendChild(Sn(o)),t.classList.add("md-source__repository--active")}),cs(e).pipe(E(o=>r.next(o)),L(()=>r.complete()),m(o=>R({ref:e},o)))})}function ps(e,{viewport$:t,header$:r}){return ge(document.body).pipe(v(()=>mr(e,{header$:r,viewport$:t})),m(({offset:{y:o}})=>({hidden:o>=10})),Z("hidden"))}function bi(e,t){return C(()=>{let r=new g;return r.subscribe({next({hidden:o}){e.hidden=o},complete(){e.hidden=!1}}),(B("navigation.tabs.sticky")?I({hidden:!1}):ps(e,t)).pipe(E(o=>r.next(o)),L(()=>r.complete()),m(o=>R({ref:e},o)))})}function ls(e,{viewport$:t,header$:r}){let o=new Map,n=$(".md-nav__link",e);for(let s of n){let p=decodeURIComponent(s.hash.substring(1)),c=fe(`[id="${p}"]`);typeof c!="undefined"&&o.set(s,c)}let i=r.pipe(Z("height"),m(({height:s})=>{let p=Se("main"),c=P(":scope > :first-child",p);return s+.8*(c.offsetTop-p.offsetTop)}),pe());return ge(document.body).pipe(Z("height"),v(s=>C(()=>{let p=[];return I([...o].reduce((c,[l,f])=>{for(;p.length&&o.get(p[p.length-1]).tagName>=f.tagName;)p.pop();let u=f.offsetTop;for(;!u&&f.parentElement;)f=f.parentElement,u=f.offsetTop;let h=f.offsetParent;for(;h;h=h.offsetParent)u+=h.offsetTop;return c.set([...p=[...p,l]].reverse(),u)},new Map))}).pipe(m(p=>new Map([...p].sort(([,c],[,l])=>c-l))),We(i),v(([p,c])=>t.pipe(jr(([l,f],{offset:{y:u},size:h})=>{let w=u+h.height>=Math.floor(s.height);for(;f.length;){let[,A]=f[0];if(A-c=u&&!w)f=[l.pop(),...f];else break}return[l,f]},[[],[...p]]),K((l,f)=>l[0]===f[0]&&l[1]===f[1])))))).pipe(m(([s,p])=>({prev:s.map(([c])=>c),next:p.map(([c])=>c)})),Q({prev:[],next:[]}),Ye(2,1),m(([s,p])=>s.prev.length{let i=new g,a=i.pipe(X(),ne(!0));if(i.subscribe(({prev:s,next:p})=>{for(let[c]of p)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle("md-nav__link--active",c===s.length-1)}),B("toc.follow")){let s=S(t.pipe(_e(1),m(()=>{})),t.pipe(_e(250),m(()=>"smooth")));i.pipe(b(({prev:p})=>p.length>0),We(o.pipe(be(se))),ee(s)).subscribe(([[{prev:p}],c])=>{let[l]=p[p.length-1];if(l.offsetHeight){let f=cr(l);if(typeof f!="undefined"){let u=l.offsetTop-f.offsetTop,{height:h}=ce(f);f.scrollTo({top:u-h/2,behavior:c})}}})}return B("navigation.tracking")&&t.pipe(U(a),Z("offset"),_e(250),Ce(1),U(n.pipe(Ce(1))),st({delay:250}),ee(i)).subscribe(([,{prev:s}])=>{let p=xe(),c=s[s.length-1];if(c&&c.length){let[l]=c,{hash:f}=new URL(l.href);p.hash!==f&&(p.hash=f,history.replaceState({},"",`${p}`))}else p.hash="",history.replaceState({},"",`${p}`)}),ls(e,{viewport$:t,header$:r}).pipe(E(s=>i.next(s)),L(()=>i.complete()),m(s=>R({ref:e},s)))})}function ms(e,{viewport$:t,main$:r,target$:o}){let n=t.pipe(m(({offset:{y:a}})=>a),Ye(2,1),m(([a,s])=>a>s&&s>0),K()),i=r.pipe(m(({active:a})=>a));return z([i,n]).pipe(m(([a,s])=>!(a&&s)),K(),U(o.pipe(Ce(1))),ne(!0),st({delay:250}),m(a=>({hidden:a})))}function gi(e,{viewport$:t,header$:r,main$:o,target$:n}){let i=new g,a=i.pipe(X(),ne(!0));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(U(a),Z("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),d(e,"click").subscribe(s=>{s.preventDefault(),window.scrollTo({top:0})}),ms(e,{viewport$:t,main$:o,target$:n}).pipe(E(s=>i.next(s)),L(()=>i.complete()),m(s=>R({ref:e},s)))}function xi({document$:e,viewport$:t}){e.pipe(v(()=>$(".md-ellipsis")),oe(r=>tt(r).pipe(U(e.pipe(Ce(1))),b(o=>o),m(()=>r),Te(1))),b(r=>r.offsetWidth{let o=r.innerText,n=r.closest("a")||r;return n.title=o,B("content.tooltips")?lt(n,{viewport$:t}).pipe(U(e.pipe(Ce(1))),L(()=>n.removeAttribute("title"))):O})).subscribe(),B("content.tooltips")&&e.pipe(v(()=>$(".md-status")),oe(r=>lt(r,{viewport$:t}))).subscribe()}function yi({document$:e,tablet$:t}){e.pipe(v(()=>$(".md-toggle--indeterminate")),E(r=>{r.indeterminate=!0,r.checked=!1}),oe(r=>d(r,"change").pipe(Dr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ee(t)).subscribe(([r,o])=>{r.classList.remove("md-toggle--indeterminate"),o&&(r.checked=!1)})}function fs(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ei({document$:e}){e.pipe(v(()=>$("[data-md-scrollfix]")),E(t=>t.removeAttribute("data-md-scrollfix")),b(fs),oe(t=>d(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function wi({viewport$:e,tablet$:t}){z([Ve("search"),t]).pipe(m(([r,o])=>r&&!o),v(r=>I(r).pipe(Ge(r?400:100))),ee(e)).subscribe(([r,{offset:{y:o}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${o}px`;else{let n=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",n&&window.scrollTo(0,n)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let o=e[r];typeof o=="string"?o=document.createTextNode(o):o.parentNode&&o.parentNode.removeChild(o),r?t.insertBefore(this.previousSibling,o):t.replaceChild(o,this)}}}));function us(){return location.protocol==="file:"?wt(`${new URL("search/search_index.js",Xr.base)}`).pipe(m(()=>__index),G(1)):Ne(new URL("search/search_index.json",Xr.base))}document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var ot=Yo(),jt=nn(),Ot=cn(jt),Zr=on(),Oe=bn(),hr=$t("(min-width: 960px)"),Si=$t("(min-width: 1220px)"),Oi=pn(),Xr=ye(),Mi=document.forms.namedItem("search")?us():Ke,eo=new g;Bn({alert$:eo});var to=new g;B("navigation.instant")&&Zn({location$:jt,viewport$:Oe,progress$:to}).subscribe(ot);var Ti;((Ti=Xr.version)==null?void 0:Ti.provider)==="mike"&&ii({document$:ot});S(jt,Ot).pipe(Ge(125)).subscribe(()=>{Je("drawer",!1),Je("search",!1)});Zr.pipe(b(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=fe("link[rel=prev]");typeof t!="undefined"&&pt(t);break;case"n":case".":let r=fe("link[rel=next]");typeof r!="undefined"&&pt(r);break;case"Enter":let o=Re();o instanceof HTMLLabelElement&&o.click()}});xi({viewport$:Oe,document$:ot});yi({document$:ot,tablet$:hr});Ei({document$:ot});wi({viewport$:Oe,tablet$:hr});var rt=Nn(Se("header"),{viewport$:Oe}),Ft=ot.pipe(m(()=>Se("main")),v(e=>Qn(e,{viewport$:Oe,header$:rt})),G(1)),ds=S(...ae("consent").map(e=>xn(e,{target$:Ot})),...ae("dialog").map(e=>Dn(e,{alert$:eo})),...ae("header").map(e=>zn(e,{viewport$:Oe,header$:rt,main$:Ft})),...ae("palette").map(e=>Kn(e)),...ae("progress").map(e=>Yn(e,{progress$:to})),...ae("search").map(e=>li(e,{index$:Mi,keyboard$:Zr})),...ae("source").map(e=>hi(e))),hs=C(()=>S(...ae("announce").map(e=>gn(e)),...ae("content").map(e=>Un(e,{viewport$:Oe,target$:Ot,print$:Oi})),...ae("content").map(e=>B("search.highlight")?mi(e,{index$:Mi,location$:jt}):O),...ae("header-title").map(e=>qn(e,{viewport$:Oe,header$:rt})),...ae("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Nr(Si,()=>Jr(e,{viewport$:Oe,header$:rt,main$:Ft})):Nr(hr,()=>Jr(e,{viewport$:Oe,header$:rt,main$:Ft}))),...ae("tabs").map(e=>bi(e,{viewport$:Oe,header$:rt})),...ae("toc").map(e=>vi(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Ot})),...ae("top").map(e=>gi(e,{viewport$:Oe,header$:rt,main$:Ft,target$:Ot})))),Li=ot.pipe(v(()=>hs),Pe(ds),G(1));Li.subscribe();window.document$=ot;window.location$=jt;window.target$=Ot;window.keyboard$=Zr;window.viewport$=Oe;window.tablet$=hr;window.screen$=Si;window.print$=Oi;window.alert$=eo;window.progress$=to;window.component$=Li;})(); +//# sourceMappingURL=bundle.fe8b6f2b.min.js.map + diff --git a/assets/javascripts/bundle.fe8b6f2b.min.js.map b/assets/javascripts/bundle.fe8b6f2b.min.js.map new file mode 100644 index 0000000..8263585 --- /dev/null +++ b/assets/javascripts/bundle.fe8b6f2b.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "src/templates/assets/javascripts/bundle.ts", "node_modules/rxjs/node_modules/tslib/tslib.es6.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/BehaviorSubject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/QueueAction.ts", "node_modules/rxjs/src/internal/scheduler/QueueScheduler.ts", "node_modules/rxjs/src/internal/scheduler/queue.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/EmptyError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/debounce.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/throwIfEmpty.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/first.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/document/index.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/hover/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/offset/_/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/browser/keyboard/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/location/hash/index.ts", "src/templates/assets/javascripts/browser/media/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/templates/assets/javascripts/browser/viewport/offset/index.ts", "src/templates/assets/javascripts/browser/viewport/size/index.ts", "src/templates/assets/javascripts/browser/viewport/_/index.ts", "src/templates/assets/javascripts/browser/viewport/at/index.ts", "src/templates/assets/javascripts/browser/worker/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/components/_/index.ts", "src/templates/assets/javascripts/components/announce/index.ts", "src/templates/assets/javascripts/components/consent/index.ts", "src/templates/assets/javascripts/templates/tooltip/index.tsx", "src/templates/assets/javascripts/templates/annotation/index.tsx", "src/templates/assets/javascripts/templates/clipboard/index.tsx", "src/templates/assets/javascripts/templates/search/index.tsx", "src/templates/assets/javascripts/templates/source/index.tsx", "src/templates/assets/javascripts/templates/tabbed/index.tsx", "src/templates/assets/javascripts/templates/table/index.tsx", "src/templates/assets/javascripts/templates/version/index.tsx", "src/templates/assets/javascripts/components/tooltip2/index.ts", "src/templates/assets/javascripts/components/content/annotation/_/index.ts", "src/templates/assets/javascripts/components/content/annotation/list/index.ts", "src/templates/assets/javascripts/components/content/annotation/block/index.ts", "src/templates/assets/javascripts/components/content/code/_/index.ts", "src/templates/assets/javascripts/components/content/details/index.ts", "src/templates/assets/javascripts/components/content/mermaid/index.css", "src/templates/assets/javascripts/components/content/mermaid/index.ts", "src/templates/assets/javascripts/components/content/table/index.ts", "src/templates/assets/javascripts/components/content/tabs/index.ts", "src/templates/assets/javascripts/components/content/_/index.ts", "src/templates/assets/javascripts/components/dialog/index.ts", "src/templates/assets/javascripts/components/tooltip/index.ts", "src/templates/assets/javascripts/components/header/_/index.ts", "src/templates/assets/javascripts/components/header/title/index.ts", "src/templates/assets/javascripts/components/main/index.ts", "src/templates/assets/javascripts/components/palette/index.ts", "src/templates/assets/javascripts/components/progress/index.ts", "src/templates/assets/javascripts/integrations/clipboard/index.ts", "src/templates/assets/javascripts/integrations/sitemap/index.ts", "src/templates/assets/javascripts/integrations/instant/index.ts", "src/templates/assets/javascripts/integrations/search/highlighter/index.ts", "src/templates/assets/javascripts/integrations/search/worker/message/index.ts", "src/templates/assets/javascripts/integrations/search/worker/_/index.ts", "src/templates/assets/javascripts/integrations/version/index.ts", "src/templates/assets/javascripts/components/search/query/index.ts", "src/templates/assets/javascripts/components/search/result/index.ts", "src/templates/assets/javascripts/components/search/share/index.ts", "src/templates/assets/javascripts/components/search/suggest/index.ts", "src/templates/assets/javascripts/components/search/_/index.ts", "src/templates/assets/javascripts/components/search/highlight/index.ts", "src/templates/assets/javascripts/components/sidebar/index.ts", "src/templates/assets/javascripts/components/source/facts/github/index.ts", "src/templates/assets/javascripts/components/source/facts/gitlab/index.ts", "src/templates/assets/javascripts/components/source/facts/_/index.ts", "src/templates/assets/javascripts/components/source/_/index.ts", "src/templates/assets/javascripts/components/tabs/index.ts", "src/templates/assets/javascripts/components/toc/index.ts", "src/templates/assets/javascripts/components/top/index.ts", "src/templates/assets/javascripts/patches/ellipsis/index.ts", "src/templates/assets/javascripts/patches/indeterminate/index.ts", "src/templates/assets/javascripts/patches/scrollfix/index.ts", "src/templates/assets/javascripts/patches/scrolllock/index.ts", "src/templates/assets/javascripts/polyfills/index.ts"], + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2024 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"focus-visible\"\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getActiveElement,\n getOptionalElement,\n requestJSON,\n setLocation,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchScript,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountProgress,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantNavigation,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchEllipsis,\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Functions - @todo refactor\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch search index\n *\n * @returns Search index observable\n */\nfunction fetchSearchIndex(): Observable {\n if (location.protocol === \"file:\") {\n return watchScript(\n `${new URL(\"search/search_index.js\", config.base)}`\n )\n .pipe(\n // @ts-ignore - @todo fix typings\n map(() => __index),\n shareReplay(1)\n )\n } else {\n return requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget(location$)\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? fetchSearchIndex()\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up progress indicator */\nconst progress$ = new Subject()\n\n/* Set up instant navigation, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantNavigation({ location$, viewport$, progress$ })\n .subscribe(document$)\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"link[rel=prev]\")\n if (typeof prev !== \"undefined\")\n setLocation(prev)\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"link[rel=next]\")\n if (typeof next !== \"undefined\")\n setLocation(next)\n break\n\n /* Expand navigation, see https://bit.ly/3ZjG5io */\n case \"Enter\":\n const active = getActiveElement()\n if (active instanceof HTMLLabelElement)\n active.click()\n }\n })\n\n/* Set up patches */\npatchEllipsis({ viewport$, document$ })\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Progress bar */\n ...getComponentElements(\"progress\")\n .map(el => mountProgress(el, { progress$ })),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, {\n viewport$, header$, main$, target$\n })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.progress$ = progress$ /* Progress indicator subject */\nwindow.component$ = component$ /* Component observable */\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\n\n/**\n * A variant of Subject that requires an initial value and emits its current\n * value whenever it is subscribed to.\n *\n * @class BehaviorSubject\n */\nexport class BehaviorSubject extends Subject {\n constructor(private _value: T) {\n super();\n }\n\n get value(): T {\n return this.getValue();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n\n getValue(): T {\n const { hasError, thrownError, _value } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n\n next(value: T): void {\n super.next((this._value = value));\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { QueueScheduler } from './QueueScheduler';\nimport { SchedulerAction } from '../types';\nimport { TimerHandle } from './timerHandle';\n\nexport class QueueAction extends AsyncAction {\n constructor(protected scheduler: QueueScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n\n public execute(state: T, delay: number): any {\n return delay > 0 || this.closed ? super.execute(state, delay) : this._execute(state, delay);\n }\n\n protected requestAsyncId(scheduler: QueueScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n\n // Otherwise flush the scheduler starting with this action.\n scheduler.flush(this);\n\n // HACK: In the past, this was returning `void`. However, `void` isn't a valid\n // `TimerHandle`, and generally the return value here isn't really used. So the\n // compromise is to return `0` which is both \"falsy\" and a valid `TimerHandle`,\n // as opposed to refactoring every other instanceo of `requestAsyncId`.\n return 0;\n }\n}\n", "import { AsyncScheduler } from './AsyncScheduler';\n\nexport class QueueScheduler extends AsyncScheduler {\n}\n", "import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\n\n/**\n *\n * Queue Scheduler\n *\n * Put every next task on a queue, instead of executing it immediately\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * ## Examples\n * Schedule recursively first, then do something\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(() => {\n * queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n * console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n * ```\n *\n * Reschedule itself recursively\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(function(state) {\n * if (state !== 0) {\n * console.log('before', state);\n * this.schedule(state - 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * console.log('after', state);\n * }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n * ```\n */\n\nexport const queueScheduler = new QueueScheduler(QueueAction);\n\n/**\n * @deprecated Renamed to {@link queueScheduler}. Will be removed in v8.\n */\nexport const queue = queueScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an

\ No newline at end of file diff --git a/atm6/draconicevolution/index.html b/atm6/draconicevolution/index.html new file mode 100644 index 0000000..097ab70 --- /dev/null +++ b/atm6/draconicevolution/index.html @@ -0,0 +1,12 @@ + Draconic Evolution - All The Guides

Draconic Evolution

Draconic Evolution | CurseForge

\ No newline at end of file diff --git a/atm6/enchanting/applicator/index.html b/atm6/enchanting/applicator/index.html new file mode 100644 index 0000000..1c99568 --- /dev/null +++ b/atm6/enchanting/applicator/index.html @@ -0,0 +1,12 @@ + Enchantment Applicator - All The Guides

Enchantment Applicator

Enchantment Applicator is a machine in Industrial Foregoing. It’s used to apply enchantments like an anvil, however it can also grant an additional enchantment level when combining the same enchantment level of an Item and an Enchantment Book, ignoring enchantment levels to reach a max of level 255 (CCLV)!.

This process will require a Black Hole Tank (Preferably Supreme), and Liquid XP or Mob Essence inside the tank on top of the applicator to function properly. Using Liquid XP will only increase enchantment level up to 20 (XX), afterwards will require Mob Essence.

After gaining an additional enchantment level, you’ll want to duplicate the enchant. There’s 2 known ways,

Duplicating Enchants

  • Disenchant and use Botania Mana Enchanter to duplicate enchantment books on a new Item.
  • Duplicate Item using Mahou Projection. (Only works with certain tools, NOT ARMOR).
    • Armor enchants can be forced on tools using Pedestal Anvil

Using the same Item in applicator will increase Repair Costs, making combining enchants more expensive!

Making Essence

Converting Liquid XP

XP Liquid can be converted to Mob Essence using PneumaticCraft Aeriel Interface.

  • Craft a Dispenser Upgrade, and placed inside Aerial Interface.
  • Change Dispesser Upgrade configuration for Mob Essence.
  • Apply 15 Bars of pressure to Aerial Interface.
  • Pump XP Liquid in -> output Mob Essence

Converting XP Orbs

XP Orbs can be converted to Mob Essence using Modular Routers. Any best way you can generate and feed Modular Router XP Orbs, but be careful that XP Clumps can cause issues.

One way this can be done is growing Mystical Agriculture experience essence.

You will need,

  • RFTools Craft (Crafts Essence into Experience Droplets)
  • A Modular Router
  • 9 Speed Upgrades
  • Activator Module (For Modular Router to consume and spit out XP Orbs)
  • Vacuum Module (To Collect XP Orbs)
  • XP Vacuum Augment (Placed inside Vacuum Module, convert to convert XP Orbs into Mob Essence)
  • Fast Pickup Augment (Placed inside Vacuum Module to make Vacuum Module collect faster)
Module Router will consume given experience droplets and spit out XP Orbs. Vacuum module will collect the XP Orbs from configured face(s). XP Vacuum Augment will convert the consumed XP into Mob Essence, which will then be automatically outputted to a tank configured face of the Modular Router.

Woot

Using Woot, you can install the Summit perk. This will output Mob Essence through Fluid Output each operation (simulated mob death). The best mob to use one that has the most HP.

Enchants can be forced onto any item using Pedestal Anvil!

\ No newline at end of file diff --git a/atm6/enchanting/botania/index.html b/atm6/enchanting/botania/index.html new file mode 100644 index 0000000..3d9bd9f --- /dev/null +++ b/atm6/enchanting/botania/index.html @@ -0,0 +1,12 @@ + Botania Mana Enchanter - All The Guides

Botania Mana Enchanter

Botania Mana Enchanter is a structure added by Botania. It uses Mana provided with Sparks or Mana Spreaders to enchant equipment with enchantments defined by Enchanted Books dropped nearby, without consuming the books. This is the slowest, yet only way to automate the process of duplicating and enchanting books using the applicator.

Building Enchanter

Botania Mana Enchanter and Enchantment Applicator can both be automated with the required materials.

Materials
  • 3 Routers
  • 3 Activator Modules
  • 1 Wand of the Forest

  • 17 Obsidian
  • 1 Lapis Block
  • 1 Mana spark
  • 6 Mana Pylons
  • 10 Dirt/Grass blocks
  • 10 Mystical Flowers

  • 1 Cyclic Dropper
  • 3 Building blocks
  • 1 Cyclic Item detector
  • 2 Redstone
  • 1 Redstone Torch
  • 1 RFtools Timer
  • 1 Vacuumulator

  • 5 Pipez (+1 upgrade for filtering)
  • Black hole Tank
  • Enchantment Applicator
  • Disenchanter
  • Entangled Block
  • Trash can

Build the Multi-Block structure shown below. Botania Lexica will help visually seeing block positions, then place down 3 Modular Routers facing into the Mana Enchanter, as shown below.

Routers Configuration

Activator Module for ALL 3 routers should look like this. Set the the FRONT face directory (middle part of GUI) as shown below.

Tool/Weapon input, keep this fed with new tools or weapons. (Ex: RS with crafting card). Be sure this is always full with a tool and set it to Pulse

Tool/Weapon Output. Be sure to set this to Redstone Mode: High

Wand Of The Forest. Give it speed upgrades if possible and a wand of the forest and set it to always on, this router always tries to start an enchanting process

Automation Setup

Place a Cyclic Dropper 1 block away from the Enchanter and set to Always Active. Place an Item Detector ontop of the bottom left flower, and a redstone line on the LEFT router

Info

The Dropper will drop an enchanted book triggering the Item detector, which triggers the LEFT router, which then puts 1 tool into the Enchanter. The RIGHT Router (with the Wand of the Forest) will iniate the enchanting process.

  • Place 3 blocks (as shown below)
  • Redstone Torch on the TOP router (against left block)
  • RFTools Timer (100 Delay, with “Pause while redstone is active” enabled) on 3rd block facing right
  • Vacuumulator with redstone on top (Set Redstone Control HIGH).

Setup pipes to pull out from the TOP router (Enchanted Tool), and the Vacuumulator (Enchanted Book).

Pipes will then go into the Enchantment Applicator. Black Hole Supreme Tank on top of the Enchantment Applicator.

Info

Enchanting higher levels will take more than 64 buckets (internal applicator buffer) of XP/Essence, which a Black Hole Tank will be required on top of the applicator to act as a secondary buffer. Liquid XP will work up too level 20, afterwards Mob Essence will be required. The Applicator page will explain best methods of generating XP or Mob Essence.

Pipe the new combined Tool out of the Applicator and put it into a Cylic Disenchanter to split the 2 again

Add a pipe, an Entangled block (linked to the Dropper at the beginning) and a Trashcan. Now set filters in your Pipez extraction point together with a destination tool. This makes the Book go in a loop and come back to the start of the cycle

Rightclick the side of the Entangled block which has the pipe leading into it with the destination tool, add the Book to the filter and remove the NBT tag so all books go to the dropper

do the same with your pickaxe, remove the NBT data, so all (old) tools go to the bin

That should look something like this

Dont forget to put a spark on your Mana Enchanter and get a decent Mana Supply! put a book into the dropper and the whole process should work automaticly.

Botania | CurseForge

\ No newline at end of file diff --git a/docs/atm6/enchanting/img/1MTtkbM.png b/atm6/enchanting/img/1MTtkbM.png similarity index 100% rename from docs/atm6/enchanting/img/1MTtkbM.png rename to atm6/enchanting/img/1MTtkbM.png diff --git a/docs/atm6/enchanting/img/1voCURd.png b/atm6/enchanting/img/1voCURd.png similarity index 100% rename from docs/atm6/enchanting/img/1voCURd.png rename to atm6/enchanting/img/1voCURd.png diff --git a/docs/atm6/enchanting/img/7chMmZ3.png b/atm6/enchanting/img/7chMmZ3.png similarity index 100% rename from docs/atm6/enchanting/img/7chMmZ3.png rename to atm6/enchanting/img/7chMmZ3.png diff --git a/docs/atm6/enchanting/img/BJ03fS6.png b/atm6/enchanting/img/BJ03fS6.png similarity index 100% rename from docs/atm6/enchanting/img/BJ03fS6.png rename to atm6/enchanting/img/BJ03fS6.png diff --git a/docs/atm6/enchanting/img/How-to-AutoEnchant-ATM6-Sky.mp4 b/atm6/enchanting/img/How-to-AutoEnchant-ATM6-Sky.mp4 similarity index 100% rename from docs/atm6/enchanting/img/How-to-AutoEnchant-ATM6-Sky.mp4 rename to atm6/enchanting/img/How-to-AutoEnchant-ATM6-Sky.mp4 diff --git a/docs/atm6/enchanting/img/OiqfDAf.png b/atm6/enchanting/img/OiqfDAf.png similarity index 100% rename from docs/atm6/enchanting/img/OiqfDAf.png rename to atm6/enchanting/img/OiqfDAf.png diff --git a/docs/atm6/enchanting/img/Xfo3D4W.png b/atm6/enchanting/img/Xfo3D4W.png similarity index 100% rename from docs/atm6/enchanting/img/Xfo3D4W.png rename to atm6/enchanting/img/Xfo3D4W.png diff --git a/docs/atm6/enchanting/img/a1mMl4Q.png b/atm6/enchanting/img/a1mMl4Q.png similarity index 100% rename from docs/atm6/enchanting/img/a1mMl4Q.png rename to atm6/enchanting/img/a1mMl4Q.png diff --git a/docs/atm6/enchanting/img/blkUApI.png b/atm6/enchanting/img/blkUApI.png similarity index 100% rename from docs/atm6/enchanting/img/blkUApI.png rename to atm6/enchanting/img/blkUApI.png diff --git a/docs/atm6/enchanting/img/fqjil6M.png b/atm6/enchanting/img/fqjil6M.png similarity index 100% rename from docs/atm6/enchanting/img/fqjil6M.png rename to atm6/enchanting/img/fqjil6M.png diff --git a/docs/atm6/enchanting/img/hFwCqAV.png b/atm6/enchanting/img/hFwCqAV.png similarity index 100% rename from docs/atm6/enchanting/img/hFwCqAV.png rename to atm6/enchanting/img/hFwCqAV.png diff --git a/docs/atm6/enchanting/img/kPa02o1.png b/atm6/enchanting/img/kPa02o1.png similarity index 100% rename from docs/atm6/enchanting/img/kPa02o1.png rename to atm6/enchanting/img/kPa02o1.png diff --git a/docs/atm6/enchanting/img/kVz4z9V.png b/atm6/enchanting/img/kVz4z9V.png similarity index 100% rename from docs/atm6/enchanting/img/kVz4z9V.png rename to atm6/enchanting/img/kVz4z9V.png diff --git a/docs/atm6/enchanting/img/pwTzGmX.png b/atm6/enchanting/img/pwTzGmX.png similarity index 100% rename from docs/atm6/enchanting/img/pwTzGmX.png rename to atm6/enchanting/img/pwTzGmX.png diff --git a/docs/atm6/enchanting/img/r2Kgd5c.png b/atm6/enchanting/img/r2Kgd5c.png similarity index 100% rename from docs/atm6/enchanting/img/r2Kgd5c.png rename to atm6/enchanting/img/r2Kgd5c.png diff --git a/docs/atm6/enchanting/img/xnHDMnN.png b/atm6/enchanting/img/xnHDMnN.png similarity index 100% rename from docs/atm6/enchanting/img/xnHDMnN.png rename to atm6/enchanting/img/xnHDMnN.png diff --git a/docs/atm6/enchanting/img/y7r4ST2.png b/atm6/enchanting/img/y7r4ST2.png similarity index 100% rename from docs/atm6/enchanting/img/y7r4ST2.png rename to atm6/enchanting/img/y7r4ST2.png diff --git a/atm6/enchanting/index.html b/atm6/enchanting/index.html new file mode 100644 index 0000000..8f87869 --- /dev/null +++ b/atm6/enchanting/index.html @@ -0,0 +1,12 @@ + Enchanting - All The Guides

Enchanting

In ATM6, Enchantment Level are ignored when using Enchantment Applicator

\ No newline at end of file diff --git a/atm6/enchanting/mahou/index.html b/atm6/enchanting/mahou/index.html new file mode 100644 index 0000000..3a03f6a --- /dev/null +++ b/atm6/enchanting/mahou/index.html @@ -0,0 +1,12 @@ + Mahou Projection - All The Guides

Mahou Projection

The first use of this scroll memorizes a tool or weapon you’re looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability. It drains mana from the caster each time the scroll is used

\ No newline at end of file diff --git a/atm6/envtech/index.html b/atm6/envtech/index.html new file mode 100644 index 0000000..5f872cc --- /dev/null +++ b/atm6/envtech/index.html @@ -0,0 +1,26 @@ + Environmental Tech - All The Guides

Environmental Tech

Void Miner

Is a multi-block structure added by Environmental Tech. It generates various ores, crystals, and botanicals using energy. It comes in 8 tiers.

Tier 2 Void Miner (Built Upside Down)

Introduction

There’s 2 IO blocks that is needed for Void Miner. At-least 1 Item Output and 1 Energy (FE) Input IO Block, though more can be used. When supplied enough power via FE Input IO’s, the Void Miner (Based on Tick Duration) will output items of various types through the Item Output IO.

This process can be sped up by using Frequency modifiers, placing them in the Void Miner modifier slots. Specific items can be made more likely to appear by using a colored Laser Lens, while this effect can be amplified by using Amplification modifiers.

Void Miner also requires it’s Laser Core to have a straight view to either Bedrock or The Void in order to work.

Transparent blocks such as Glass, walls, or fences may be used to provide a safe path under the structure without blocking the beam.

Modifiers

Modifiers are optional to use / replaced with Null Modifiers if you cannot afford to craft them. You can use higher and lower tiers of Modifiers and IO’s on any tier Void Miner multi-block, such as Tier 5 Frequency Modifiers on a Tier 2 Void Miner multi-block. This is important to note, as the Tier 1 Void Miner needs more power than one Tier 1 FE Input can give the multi-block. The solution is to either use your first two Erodium to upgrade your FE Input, or to use two Tier 1 FE Inputs on your Tier 1 Void Miner.

What is Duration & Tick Costs?
Duration
Is how long it will take the miner, provided that it has the tick cost worth of energy supplied, to generate an item.
Tick Cost
Is the energy required per tick to allow the miner to mine at the maximum speed that is currently possible with all modifiers included. If you don’t provide the tick cost amount of energy or more then your Void Miner will be slower.
View Modifiers
Frequency | Speeds up miners - Duration.
Increases the speed of the Void Miner operation. This is visually displayed on the Void Miner CCU labeled as 'Duration'. Duration is measured in ticks needed per operation. 20 ticks is equal to 1 second in real life if you are running at 20 FPS. 1,000 Duration (or 1,000 ticks) is equal to 50 seconds. 
+
+The Duration is lowered by upgrading your Frequency Modifiers, or by adding more Frequency Modifiers. Once your Duration hits 0, the item generation rate cannot go faster. Any further Frequency Modifiers will not affect the Void Miner's speed. They will only increase the Tick Cost.
+
Bandwidth | Increases amount of mined items
Increases the possible maximum stack size of each mined drop up to 64 items per single operation. Bandwidth Modifiers cannot be crafted until you generate Tier 5 Ionite Crystals at Tier 4 Void Miner (Pladium). Without any Bandwidth Modifiers, a Void Miner will produce 1 item per operation always
+
Amplification | Gives Lenses more Accuracy (High Drop Rate).
Increases the chance of getting the preferred ores with the Colored Lens the player is using. This is not a commonly used Modifier as in the later tiers of the Void Miner you will be producing hundreds of ores in fractions of a second (lmao)
+
+For example:
+    - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / No Lens = 5.61% chance for Gold Ore at 180 Duration (one operation per 9 seconds)
+    - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / Yellow Lens = 32.22% chance for Gold Ore at 180 Duration
+    - Tier 2 Void Miner / Four Tier 2 Amplification Modifiers / Yellow Lens = 38.24% chance for Gold Ore at 320 Duration (one operation per 16 seconds)
+
Dimensional
Allows Void Miner to gain any drop in the current dimension and requires two Tier 5 structure frames to craft. Interdimensional Modifier allows Void Miner to gain any drops from any dimension. 
+
Piezo
Allows solars to gen in rain/thunderstorms from vibrations.
+
Electrostatic
Allows Lightning rods to gen passively in rain and thunder.
+
Radian
Allows lightning rod to gen passively in sunny weather.
+

Note: Modifiers also have tiers based on crystal tiers respectively

Flash Memory

Creating a Flash Memory Card for Void Miner is vital for Void Miner resource generation. The Flash Memory tells Void Miner from which loot table you want to generate resources from.

  • Craft a Flash Memory and a Memory Programmer
  • Give the Memory Programmer power and place the Flash Memory in the top right box
  • Select the Miner Program you want to run, taking note of the link below

Void Miner needs to generate Crystals from Environmental Tech to upgrade to the next tier. These Crystals are generated through the Multi-Miner section of the Memory Programmer using the Crystal Program.

Lens

Lenses are crafted with 5 glass in a + pattern in any crafting grid. You will need to also craft a Lens Grinder and supply it power to color your crafted Lens. Using lenses inside the Lens Holder on the Void Miner will increase the mine rate of certain items.

For example, if you used a Yellow Lens on a Metallic Flash Memory Program, your miner would produce more Gold Ore than it usually would without the lens. You can also increase that rate even further using Amplification Modifiers.

Crystal Lens

Crystal Lenses can be crafted by placing 3x3 of the same tier crystals in a crafting grid to create a Crystal Block. Use this Crystal Block in the Lens Grinder. Crystal Lenses are highly encouraged to be used. Crystal Lenses often double the chance of generating the crystal matching your Lens.

Tiers

View Tiers
  • Litherite: 27 Litherite
  • Erodium: 70 Erodium, 32 Litherite
  • Kyronite:194 Kyronite, 94 Erodium, 48 Litherite
  • Pladium: 224 Pladium, 224 Kyronite, 114 Erodium, 58 Litherite
  • Ionite: 276 Ionite, 278 Pladium, 278 Kyronite, 142 Erodium, 72 Litherite
  • Aethium: 362 Aethium, 358 Ionite, 358 Pladium, 358 Kyronite, 182 Erodium, 92 Litherite
  • Nanorite: 378 Nanorite, 558 Aethium, 374 Ionite, 374 Pladium, 374 Kyronite, 190 Erodium, 96 Litherite
  • Xerothium: 410 Xerothium, 606 Nanorite, 606 Aethium, 406 Ionite, 406 Pladium, 406 Kyronite, 206 Erodium, 104 Litherite
Tips & Tricks

Seg: You know you can use T6 modifiers with T5 void miner, right?

Bamboo: The inter-dimensional modifier requires one bandwidth modifier (on the right) and one amplification modifier (on the left)

Void Miner Drops

Void Miner Drops Based On Lens
Mineral Resource Drops
Ore Color Dimension
Draconium Purple All
Sulfur Yellow All
Cinnabar Brown Overworld
Coal Black Overworld
Redstone Red Overworld
Niter White Overworld
Glowstone Yellow Nether
Biotite Light Grey End
Magical Resource Drops
Ore Color Dimension
Arcane Crystal Grey All
Dark Runestone Grey All
Rock Crystal White All
Runestone Grey All
Starmetal Blue All
Stella Arcanum Grey All
Vinteum Blue All
Xpetrified Green Overworld
Inferium Green Overworld
Prosperity Light Grey Overworld
Gemstone Resource Drops
Ore Color Dimension
Apatite Light Blue All
Certus Quartz Light Blue All
Charged Certus Quartz Light Blue All
Dimensional Shard White All
Ruby Red All
Sapphire Blue All
Diamond Cyan Overworld
Emerald Lime Overworld
Fluorite Pink Overworld
Lapis Blue Overworld
Nether Quartz White Nether
Metallic Resource Drops
Ore Color Dimension
Tin Grey All
Uraninite Green All
Aluminum White Overworld
Copper Orange Overworld
Gold Yellow Overworld
Iron White Overworld
Lead Purple Overworld
Nickel Grey Overworld
Osmium Light Blue Overworld
Platinum Light Blue Overworld
Silver Light Grey Overworld
Uranium Green Overworld
Yellorite Green Overworld
Zinc Pink Overworld
Ancient Debris Brown Nether
Cobalt Blue Nether
Nether Gold Yellow Nether
AllTheModium (T3+ - T6 20x More) Yellow End
Vibranium (T4 - T7 10x More) Green End
Unobtainium (T5 - T8 10x More) Purple End
Rocky Resource Drops
Ore Color Dimension
Crying Obsidian Purple All
Obsidian Purple All
Bone White Overworld and Nether
Mica None Nether and End
Andesite Light Grey Overworld
BOP Sandstone Based on Colour Overworld
Cobblestone Grey Overworld
Diorite White Overworld
Granite Pink Overworld
Orange Sandstone Orange Overworld
Red Sandstone Red Overworld
Sandstone Yellow Overworld
Stone Grey Overworld
Terracotta Based on Colour Overworld
Basalt Black Nether
Blackstone Black Nether
Gilded Blackstone Black Nether
Magma Block Orange Nether
Netherrack Red Nether
Endstone Yellow End
Frozen Resource Drops
Ore Color Dimension
Black Ice Black Overworld
Blue Ice Light Blue Overworld
Dry Ice White Overworld
Ice Light Blue Overworld
Snow White Overworld
Loose Resource Drops
Ore Color Dimension
Gravel Grey OW and Nether
Black Sand Black Overworld
Blue Sand Light Blue Overworld
BYG Glowcelium Brown Overworld
Clay Light Grey Overworld
Dirt Brown Overworld
Limesand Light Grey Overworld
Meadow Dirt Brown Overworld
Mud Brown Overworld
Origin Grass Green Overworld
Peat Brown Overworld
Pink Sand Pink Overworld
Purple Sand Purple Overworld
Sand Yellow Overworld
Sponge Yellow Overworld
White Sand White Overworld
Grassy Netherrack Green Nether
Nylium Soul Sand Green Nether
Quartzite Sand White Nether
Soul Sand Brown Nether

Solar Panel

Environmental Tech | CurseForge

\ No newline at end of file diff --git a/atm6/faq/index.html b/atm6/faq/index.html new file mode 100644 index 0000000..df01353 --- /dev/null +++ b/atm6/faq/index.html @@ -0,0 +1,12 @@ + F.A.Q - All The Guides

F.A.Q

How do I get started?

If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide.

Is there a list of mods?

Yes, on CurseForge

How to chunk load chunks?

Chunkloading is handled by FTB Chunks. Open your map where you claim chunks and once you have a chunk claimed, shift click that same chunk. It should show a red X through the chunk, showing that it is force loaded.

Where can I find AllTheModium, Vibranium, & Unobtanium?

Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book.

How do I deal with the Chaos Dragon?

The chaos guardian is a multi-phase fight. The crystals can only be damaged by the dragon and it’s attacks -or- chaos tier weapons, but the final hit on them will have to come from you to destroy them. Once all the crystals are destroyed, only half the time will it be susceptible to damage, when it doesnt have a blue shield. It has two health bars as well - a red over shield and then its actual HP.

How do you auto enchant to get OP enchants beyond vanilla?

Check out the Enchanting Guide!

\ No newline at end of file diff --git a/atm6/iceandfire/index.html b/atm6/iceandfire/index.html new file mode 100644 index 0000000..86c5237 --- /dev/null +++ b/atm6/iceandfire/index.html @@ -0,0 +1,12 @@ + Ice & Fire - All The Guides

Ice & Fire

Dragons only spawn in The Other dimension which you can reach by using a Teleport Pad in the Nether. (Shift-right click with an empty hand, and nothing in offhand). Most of other ice and fire structure spawns are disabled.

Finding Dragons

Travel 800 blocks from spawn in The Other, and look for specific dragons in specific biomes. Natures Compass and Spectral Eye Amulet will help. There is also a scrying ritual from Ars Nouveau that can locate chests. In addition, Corrupted Chorus Fruit can be used to ‘noclip’ through blocks, allowing you to move quickly through them and see where you’re going. Higher tier dragons are in underground roosts around y35.

Biomes

  • Lightning: The Other: Desert, The Other: Desert Hills
  • Fire: The Other: Basalt Deltas
  • Ice: The Other: Mountains

Looting

Right click with empty hand on a dead dragon corpse too loot it.

Note: Obtain Dragon Blood by right clicking a dragon corpse with a bottle. This changes the loot table so you only get bones, blood, and skulls.

Forges

For each Dragon Forge,

  • Lightning: Unobtainium-Allthemodium
  • Fire: Vibranium-Allthemodium
  • Ice: Unobtainium-Vibranium

Note: Blocks (including Compressed) can be used instead of dusts, and or ingots

Ice & Fire Dragons | CurseForge

\ No newline at end of file diff --git a/docs/atm6/img/1U2YaoUJ_NMRa4_4iJcsdBDC_eB8VmNW3hmG1Onsm.png b/atm6/img/1U2YaoUJ_NMRa4_4iJcsdBDC_eB8VmNW3hmG1Onsm.png similarity index 100% rename from docs/atm6/img/1U2YaoUJ_NMRa4_4iJcsdBDC_eB8VmNW3hmG1Onsm.png rename to atm6/img/1U2YaoUJ_NMRa4_4iJcsdBDC_eB8VmNW3hmG1Onsm.png diff --git a/docs/atm6/img/1myfUzK863HBW2us5RUvRhF_iYN8E23V2pMjIUYHy.png b/atm6/img/1myfUzK863HBW2us5RUvRhF_iYN8E23V2pMjIUYHy.png similarity index 100% rename from docs/atm6/img/1myfUzK863HBW2us5RUvRhF_iYN8E23V2pMjIUYHy.png rename to atm6/img/1myfUzK863HBW2us5RUvRhF_iYN8E23V2pMjIUYHy.png diff --git a/docs/atm6/img/1oGtlPhbV2XnownrAfF4R9xyh7aGAzVMuBb7WuhC6.png b/atm6/img/1oGtlPhbV2XnownrAfF4R9xyh7aGAzVMuBb7WuhC6.png similarity index 100% rename from docs/atm6/img/1oGtlPhbV2XnownrAfF4R9xyh7aGAzVMuBb7WuhC6.png rename to atm6/img/1oGtlPhbV2XnownrAfF4R9xyh7aGAzVMuBb7WuhC6.png diff --git a/docs/atm6/img/atm6Logo.png b/atm6/img/atm6Logo.png similarity index 100% rename from docs/atm6/img/atm6Logo.png rename to atm6/img/atm6Logo.png diff --git a/docs/atm6/img/beemutation.jpeg b/atm6/img/beemutation.jpeg similarity index 100% rename from docs/atm6/img/beemutation.jpeg rename to atm6/img/beemutation.jpeg diff --git a/docs/atm6/img/sgear-bow.png b/atm6/img/sgear-bow.png similarity index 100% rename from docs/atm6/img/sgear-bow.png rename to atm6/img/sgear-bow.png diff --git a/docs/atm6/img/sgear-gemingot.png b/atm6/img/sgear-gemingot.png similarity index 100% rename from docs/atm6/img/sgear-gemingot.png rename to atm6/img/sgear-gemingot.png diff --git a/docs/atm6/img/sgear-katana.png b/atm6/img/sgear-katana.png similarity index 100% rename from docs/atm6/img/sgear-katana.png rename to atm6/img/sgear-katana.png diff --git a/docs/atm6/img/sgear-machete.png b/atm6/img/sgear-machete.png similarity index 100% rename from docs/atm6/img/sgear-machete.png rename to atm6/img/sgear-machete.png diff --git a/docs/atm6/img/sgear-paxel.png b/atm6/img/sgear-paxel.png similarity index 100% rename from docs/atm6/img/sgear-paxel.png rename to atm6/img/sgear-paxel.png diff --git a/docs/atm6/img/sgear-sword.png b/atm6/img/sgear-sword.png similarity index 100% rename from docs/atm6/img/sgear-sword.png rename to atm6/img/sgear-sword.png diff --git a/atm6/index.html b/atm6/index.html new file mode 100644 index 0000000..812fa87 --- /dev/null +++ b/atm6/index.html @@ -0,0 +1,12 @@ + All The Mods 6 - All The Guides

All The Mods 6

Welcome to ATM6 Guides!

Minimum required ram 10GB.

ATM6 | CurseForge | GitHub

\ No newline at end of file diff --git a/atm6/mahou/book/index.html b/atm6/mahou/book/index.html new file mode 100644 index 0000000..da117e0 --- /dev/null +++ b/atm6/mahou/book/index.html @@ -0,0 +1,12 @@ + Mahou Book - All The Guides

Mahou Book

A mahoutsukai, simply, is a magic user. And congrats! You are one such magic user.

Let’s first see how to draw a circle in blood. It’s easy - just take damage, and quickly use the keybind to draw a circle in blood on the floor. If successful, you’ll see a blood circle on the ground, and a mana bar (Mahou X/Y) somewhere on your screen. Note: there is a dagger to damage yourself, if you prefer.

Alarm Boundary

The Alarm Boundary is perhaps the most basic of boundary magic - it simply alerts you to mobs and players as they enter the range of the boundary.

It drains mana from the caster every second(s).

Alarm boundaries will also output a comparator value of 15 when it detects anything in the boundary.

Alchemical Exchange

This circle will, once a day around the time of placement, convert blocks underneath it into random other blocks of the same class. For example, dirt may become sand, diamonds may become emeralds, etc. However, this only works on natural blocks, and will not work on things such as bricks or diamond blocks.

It drains mana from the caster per transformation.

Ascension

This spell, when used without a cloth, will teleport any thing (including items and mobs) on top of it to the highest solid Y value it can find. The scroll version of this spell will simply transport the caster.

It drains mana from the caster per teleport.

Binding Eyes

When used, eye contact between the caster and any mob or player binds that mob or player in place. Players, however, can escape this binding by simply breaking eye contact.

It drains mana on use.

Black Flame Eyes

When used, black flames will sprout at the caster’s viewing location for a short time. These flames spread somewhat quickly, but do not consume blocks and inflict wither damage to those who come in contact with them.

It drains mana from the caster on use.

Borrowed Authority

Borrow the authority of the gods with this scroll, which increases the caster’s speed and power, to the extent that mobs hit while using it will break through walls.

It drains mana from the caster on use.

Boundaries

Boundaries are a category of AOE spells which operate in a radius around a placed circle, and drain mana on a fixed basis. You can turn them on and off by right clicking them. A redstone signal will also invert their on/off status.

Boundaries give off comparator output - 0 when off, 1 when on.

Lastly, boundary scrolls can be used to quickly place boundaries in another location.

Butterfly Effect

When this scroll is used, the caster is granted Foresight for a short duration. During this time, breaking/placing a block, or swinging a weapon will be delayed for the future. A butterfly will mark the spot, and things colliding with this butterfly will trigger its effect.

WARNING: DO NOT USE ON IMPORTANT BLOCKS.

This spell drains mana from the caster upon use.

Catalyst Exchange

When placed on the floor, this circle will convert any powdered catalysts on top of it into a new random powdered catalyst.

It drains mana from the caster per transformation.

Catalysts

There are seven catalysts representing each of the known categories of magic. Powdered Catalysts are created by taking a Hammer or a Mortar and Pestle, and smashing these catalysts.

The categories are:

  • Iron - Boundaries
  • Ender Pearl - Displacement
  • Diamond - Projection
  • Emerald - Exchange
  • Gold - Mystic
  • Quartz - Intelligence
  • Ender Eye - Mystic Eyes
Categories
  • Boundaries deal with AOE effects centered on a magic circle.
  • Displacement spells deal with teleportation magic.
  • Projection spells deal with weapons.
  • Exchange spells usually involve a trade of some sort, often to refund or generate mana.
  • Mystic spells are unique, often offensive spells, which provide miscellaneous effects.
  • Mystic Eyes spells deal with sight based effects.
  • Intelligence spells deal with decision making, often focused around entities.

There are also some rumored secret spells..

Chronal Exchange

When placed on the floor, this circle will generate mana for 12 hours, centered on the time of placement. For the other 12 hours, it will drain mana from the caster, gems, or mana circuits.

It will drain or restore up to mana every so often, depending on how far it is from its peak. Note that skipping time will only delay the cycle, instead of skipping it.

Circuits

Mana Circuits are blocks which store mana. Mana in them can be used by the player when nearby, as long as the player owns the block. Whoever right clicks a mana circuit first after it is placed owns the block. Right click to put mana in. Shift right click to turn it on or off. Mana Circuits can be right clicked with Fae Essence to open them to use by other players.

Clairvoyance

When used, the caster will be able to see the predicted path of certain mobs. Unfortunately, some mobs are an enigma and cannot be predicted accurately, such as skeletons.

It drains mana on use.

Clarent

A strengthened sword forged in dragon’s breath, Clarent has one purpose: to overthrow the king.

Rather than retaining a damage value, Clarent instead does the damage of its opponent’s weapon.

Clarent’s passive, Vengeance, allows it to block attacks. Clarent remembers these attacks, and in its next attack will release its pent up frustrations.

Lastly, Clarent has the ability to mortally wound its target, leaving them wounds that will damage them should they move too quickly.

Contract

When two players create their own contract circles, and stand on them nearby, a contract will be formed between the players. Contracts allow players to bypass certain effects such as boundaries and some mystic eyes. To break a contract, one player need only damage the other.

It drains mana from each player when a contract is formed.

Cup Of Heaven

The most complex spell, and used primarily as a way of applying mass negative effects. When many of these circles are placed on the floor and activated by a scroll, the external convex polygon (google: Graham Scan) is calculated. The prime factors in the external polygon and those in the internal polygon determine the negative effects. All mobs and players within the external polygon at the time of activation receive these effects.

For example, if a pentagon is made with 5 of these circles, with 4 internal circles (placed anywhere inside the pentagon), the affected mobs will receive Poison 2 and Blindness 1. Why? 4 = 2 * 2. The prime factor 2 maps to poison, and the prime factor 5 maps to blindness. These prime factors go up to 13, including Poison (2), Weakness (3), Blindness (5), Slowness(7), Wither (11), Levitation (13).

For a cup of heaven which grants poison 1 and wither 1, for example, you could simply create a 22-sided polygon and all mobs inside would be affected.

Mana cost varies depending on the effects and area covered.

Damage Exchange

When used, the player will convert damage taken into mana a set number of times (not time-based).

It drains mana on use.

Damage Replication

When used on another mob or player, this scroll will replicate damage and potions that affect the caster to the target.

It drains mana on using the scroll.

Death Collection Eyes

When used, the caster collects souls upon seeing death - this death can occur in any way, but the caster does have to be looking at it. If the caster has collected enough souls, their death will be prevented in exchange for souls, whether or not the eyes are active.

It drains mana from the caster on use.

Displacement Boundary

The Displacement Boundary teleports entities that attempt to enter the range of the boundary to the other side of the boundary. In doing so, it will attempt to displace blocks that would suffocate said entity.

It drains mana from the caster every second(s).

Drain Life Boundary

The Boundary of Drain Life slowly drains health from nearby mobs in a range of. For every health drained, health, hunger, or mana is restored to the caster, in that order, according to the caster’s needs.

It drains mana from the caster every second(s).

Durability Exchange

When placed on the floor, this circle will convert the durability of items on top of it into mana. Alternatively, it can do so from a chest underneath it as well.

It can restore a maximum of mana per second. Note that higher durability items are consumed faster.

Emrys

A staff named after it’s original owner, a backwards mage who couldn’t decide which weapon was his favorite, Emrys is intended to be used in the off-hand. It provides strength in the form of lightning to an empty right hand, melee weapons, and some projectile weapons.

The mage who created the staff luckily documented his struggles - simply get struck by lightning while holding a strengthened stick.

Enclosure Boundary

The Enclosure Boundary raises the floor around you to create a makeshift set of walls with radius.

It drains mana from the caster for every layer of blocks that it raises.

Equivalent Displacement

An Equivalent Displacement circle on the ground can be linked (by shift-right-clicking) to another equivalent displacement circle anywhere in the world or across dimensions. However, a teleport between the two can only happen if there is something on BOTH circles. That something can be an item or mob, and the chunks must be loaded.

It drains mana from the caster per teleport.

Explosion Staff

This scroll summons a staff with explosive power. The staff has a long charge up time (the beam in the middle indicates readiness), and creates a large explosion. Shift right clicking with the staff will change it to fire multiple, smaller, explosions, and shift right clicking again will enable a beam mode.

When in beam mode the staff’s damage accelerates the longer the beam is held. Also, the beam will destroy blocks it comes in contact with.

The scroll drains mana from the caster, mana when using the large explosion mode, mana when using the AOE explosion mode, and mana per tick when using the beam mode.

Fae

The Fae are spiritlike creatures that occasionally roam the earth. Like leylines, they can also only be seen with Mystic Eyes of Fay Sight. Their laughter sounds like bells, and they drop Fae Essence upon death.

The Fae are particularly attracted to magic being performed on leypoints.

They are breedable through the use of any Powdered Catalyst.

Fae Essence

Fae Essence is dropped by the fae. Right clicking with fae essence will place a fae circle. Scrolls and stationary circles created by fae essence can be used by anyone. You can claim a fae circle by right clicking it, and it will drain mana from you when used. Most importantly, because Fae Essence is not bound to a user, it is ideal for automated scroll creation.

Faecake

Like a cupcake, but with fae essence. Watching you eat this disgusts the Fae, to the point where they will avoid you even if you perform magic on a leypoint. Reawakening the Mystic Eyes of Fay Sight is a good way to get rid of the effects of the faecake, as the Fae are quite partial to those who can see them.

Fallen Down

Give your friends, enemies and acquaintances the burial they deserve! It may be best not to do this near things you care about, though.

This spell costs mana every fifth of a second. Naturally, the longer you channel it, the deeper the grave. Your friends should thank you, really. Note: Flight is a natural counter to this spell.

If you shift right click with a Fallen Down scroll, it will switch to beam mode, which will terraform and burn the surrounding mobs and land.

Familiar Exchange

When used, the caster will switch places with the familiar if it exists.

It drains mana from the caster on use.

Familiars Garden

When used while a familiar is active, the familiar will activate its garden. Mobs and players in the garden will not be able to harm each other. The affected area moves with the familiar, and particles are produced to show the area.

It drains mana from the caster on use.

Fay Sight Eyes

Very simply, this spell allows the player to see Leylines and the Fae.

It drains mana from the caster on use.

Fog Projector

The Fog Projector is a decorative block which can be used to display and control two types of fog - particle and camera-based. It allows you to control the color as well as thickness of each type of fog, along with other attributes.

Gandr

A primeval curse which gains power based on the user’s magical capability. Requiring a percentage of the user’s mana capacity, when fired, this curse scales damage depending on the amount of mana spent to fire it.

Furthermore, this curse will absorb and cleanse any negative effects the user may be experiencing, and spread them around its point of impact.

Geas

Geasa are self-imposed taboos. By placing a geas on oneself, you can prevent yourself from doing some undesirable things.

For example, using it on a player will prevent you from harming that player. Using it on a sheep will prevent you from harming any sheep.

Using it on a named sheep will prevent you from harming that specific sheep. Lastly, using it on a dropped item, will prevent you from picking up that item. Use it without a target to see your current geasa. Creating and removing geasa costs mana each, and having many geasa targeting unnamed mobs will regenerate mana.

Gems

If you craft an Attuner with a Diamond or Emerald, you can get an attuned gem. These gems will store mana for you, if you right click while holding the gem. Spells will automatically draw from any gems on your person.

Gravity Boundary

The Gravity Boundary increases the gravity for mobs other than the caster in an area of range.

It drains mana from the caster every second(s).

Immunity Exchange

This scroll can be used on either the player or something the player is looking at. The target of the scroll will take no damage from repeated damage sources, but will take double damage from a damage source that was different from the last one.

It drains mana from the caster on use.

Insight

The Mystic Eyes of Insight allow the user to see more information about a target, such as its inventory, and, in the case of living creatures, their buffs, debuffs, etc. The mana cost is per scroll.

Kodoku

Kodoku refers to the practice of encouraging conflict between a number living things, and then harnessing the strongest surviving thing’s essence for power using special Kodoku worms.

Every time a monster kills something, their kodoku value goes up by 1, plus the kodoku value of the monster it killed. When you have a specimen with a high kodoku value, simply place a hungry kodoku worm on it (right-click) and kill the specimen.

When a worm consumes the essence of a mob with a high kodoku value, you can simply right-click to pick it up. Worms with high kodoku values have a number of uses.

When burned, these worms will generate mana for any nearby mana circuits. The amount of mana depends on how close to a leyline the burning occurred.

These worms can also be used for sympathetic magic.

Sympathetic Magic refers to a symbolic magic, in which a target can be affected remotely through the use of a symbol.

To use a scrying circle for sympathetic magic, it must be actively scrying something. Also, an inventory under the scrying circle must contain Kodoku worms to act as fuel. Worms with higher kodoku values will increase the chance of successful sympathetic magic.

When an active scrying circle with Kodoku worms underneath is set up, simply throw items for various effects on top of the circle.

  • Blaze Powder - Fire
  • Rabbit Foot - Hop
  • Splash Potions - Effects
  • Glowstone Dust - Glowing
  • Rotten Flesh - Hunger
  • Kodoku worms - Misfortune

Misfortune applies various effects such as being struck by lightning, dropping items, negative looting, tripping, breaking tools, increased aggro, with chances scaling depending on the quality of the worm.

  • Ender Pearl - Teleports target (Players must have a contract with caster to be teleported)
  • Nether Wart - Confusion

You can counter sympathetic magic against yourself by keeping a worm with a high kodoku value in your inventory. The higher the value, the less likely the magic will succeed against you, and there’s even a chance it will be reflected to the caster.

Leylines

Leylines connect certain points throughout the world. They can only be seen with Mystic Eyes of Fay Sight. Being near a leyline or leypoint increases mana regeneration based on a percentage of your maximum mana.

The Fae spawn near leylines.

Furthermore, Leylines will boost elytra if you fly along the leyline.

Magic

To perform Magic, we need a few things - mana, (optionally, depending on the recipe) a cloth, a blood circle, and 3 powdered catalysts. If the recipe is for a scroll, you’d put the cloth down first, and then draw a blood circle on top. Otherwise, simply put the circle on the floor. Take your powdered catalysts and right click the circle to add them to it.

Mana

Using mana increases your maximum mana capacity over time - it’s like exercising. You will naturally recover some mana over time, depending on how full your hunger is. Sleeping will regen a good chunk of your mana, and sleep is important, so sleep often!

Mental Displacement

A mental displacement scroll allows the caster to temporarily leave his body behind and explore the world in a certain radius.

It drains mana from the caster on use.

Morgan

This wicked sword is the result of the corruption of the holy sword Caliburn. Obtained through the murder of a player’s best and most loyal friend with the holy sword Caliburn, this sword obtains its power not from a mysterious lake, but from the killing of innocents.

Villagers, and more so, child villagers, provide a damage bonus for this sword (requires mana), and also heal any damage the sword has.

Holding right click with this sword releases a ball of evil to stab and pull nearby enemies. Lastly, pressing the keybind with the sword equipped provides a Rage effect, which very briefly boosts attack speed and walking speed.

Both of these abilities invoke a cooldown that prevents either from being used.

Mystic Code

The Mystic Code is an item which holds three stacks of scrolls. Shift right click opens the inventory. The keybind switches between the scrolls. Clicking or holding right click uses the currently selected scroll.

Mystic Code First Sorcery

The Mystic Code - First Sorcery is a variant of the mystic code, which has a set durability, but also allows for the reuse of scrolls it contains.

Ordered Displacement

An Ordered Displacement circle on the ground teleports any thing on top of it to a nearby Ordered Displacement circle. Which one it teleports you to depends on the order in which you placed the circles. You can sneak to stop teleporting.

It drains mana from the caster per teleport.

Power Consolidation

This circle, when placed on the floor, will spawn a lake. Each growth of the lake costs mana. When the lake has reached full size, the caster can throw in an enchanted sword in order to get Caliburn, a holy sword which will have the damage of the sword plus extra based on its enchantments. (hint: holier is better!)

Exchanging a sword costs mana.

The holy sword, Caliburn, has several properties. First, undead and unholy monsters will fear it and attempt to flee. Second, right-clicking will pull both the caster and such monsters closer. Using the keybind, the sword can smite such monsters, with a cooldown. As Caliburn is a sword, the Power Consolidation process can be repeated by simply enchanting it.

Caliburn seems to have some innate limits - maybe there are some items you could offer to the lake with Caliburn, as proof of your purity, to remove these limits?

Presence Concealment

A Scroll of Presence Concealment grants the user the two Rippers in exchange for mana.

When one Ripper is wielded, right clicking will create a thick fog around either the user, or a target the user was looking at. Doing the above with a Ripper in either hand will provide true presence concealment, in addition to the fog, rendering the player and his items invisible.

Because The Rippers are intended to be dual wielded, it is possible to attack with both simultaneously. Furthermore, attacking from behind a target with a Ripper will deal bonus damage.

Take note that your invisibility will disappear temporarily after you attack, but it will return shortly after. Monsters may or may not be able to track you after you disappear again, so it is recommended to move quickly.

Probability Alter

Place at least 2 of these circles on the floor within range of the caster, each with a chorus fruit (see config) on top.

The number of nearby circles with chorus fruits when the scroll version of this spell is used becomes the Modulus of the Rule Breaker given by the scroll. This scroll costs mana to use. See Rule Breaker’s page for more details.

Projectile Displacement

A Projectile Displacement scroll teleports you to the last arrow you shot.

It drains mana from the caster on use.

Projection

The first use of this scroll memorizes a tool or weapon you’re looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability.

It drains mana from the caster each time the scroll is used.

Projector

The Mahoujin Projector is a decorative block, which simply displayes runes and a magic circle. Right clicking on the block allows you to configure the size, angle, color, speed, etc. You can load in custom circles and runes through the config.

The Mahoujin Projector is also wearable! Right click with an armor item on a projector to receive a special enchantment that displays that projector’s settings. Right click again to get new settings after modifying.

Also, you can copy and paste from projector to projector by right clicking to copy, and shift right clicking to paste with a normal stick.

Protective Displacement

Ever wondered what it’s like to be an Enderman? The Protective Displacement scroll will randomly teleport you when you would otherwise have been hit by an arrow.

It drains mana from the caster when used, and provides a set number of teleports - it is not time based.

Proximity Projection

Using this scroll grants the caster a weapon, which allows the caster to simultaneously teleport to and attack an entity they can see at long range.

It drains mana from the caster on use of the scroll.

Reality Marble

This scroll teleports the user (and optionally, a target the user is looking at) to a fixed spot in the Reality Marble. If the user has a target, one of the two must die for the other to leave. Otherwise, taking damage will allow the player to leave.

It drains mana from the caster on use.

Recall Familiar

When used, the player’s familiar, if it exists, will be recalled to the player.

It drains mana on use.

Replica

When you’re done defending yourself, it’s about time you start defending your friends. Replica is a mainhand greatshield with a number of abilities, granted to those who have just about maxed out their defensive capabilities, yet still feel the need to use a shield.

Note the following controls carefully:

AOE Teleportation: Save a location with shift+right click. Teleport to it later, along with everything around you by blocking with the shield and pressing. Break a block with Replica to toggle teleporting friendlies only.

Cover Move: Sprint towards a teammate and block to place yourself between them and their closest, most threatening enemy.

Shockwave: Simply blocking with this greatshield is enough to knockback surrounding opponents, dealing damage according to the number of nearby allies you have.

Replicate: Replica has the ability to remember up to 6 damage types that it has blocked. You can choose Shockwave’s damage type by pressing.

Note that allies refers to those for which the wielder of Replica has a geas or a contract with.

To get Replica, block an attack with a strengthened shield, in your main hand, while also having Immunity Exchange, maximum Damage Absorption stacks, above 15 armor, and over 100 Death Collection souls .

Retribution

A Scroll of Retribution exchanges the health percentage of the caster with the health percentage of the target. It drains mana based on the difference between the user and target’s health. The cost is times the difference in health points.

Reversion Eyes

When used, mobs and players in the caster’s view will lose their buffs, along with certain other qualities, depending on the mob. Water mobs will no longer breathe underwater - nether mobs will be affected by fire and lava. Endermen, Shulker boxes and the Wither will no longer be immune to arrows. Husks can catch fire in the sun.

It drains mana from the caster on use.

Rho Aias

This scroll creates a large shield in front of the caster in the direction it is used. Mobs bounce off of it, and various projectiles are deleted by it. If desired, the caster can also bounce on it by sneaking.

It drains mana on use.

Rhongomyniad

The Holy Lance, Rhongomyniad, is acquired by throwing a lance into the lake of a Power Consolidation ritual. The Lance Which Brings Stability to the World, Rhongomyniad, can first and foremost act as a normal lance - it can unseat opponents in a joust, depending on its weight and damage, and the speed of the rider. Furthermore, mounted wielders of Rhongomyniad will gain speed in the presence of evil.

Rhongomyniad can be placed using shift right-click, where it assumes its role as a purveyor of punishment. Evil creatures and persons, including those who would do harm to those who are not evil, will be smitten within Rhongomyniad’s range, according to Rhongomyniad’s current attack damage. This will continually drain mana. Right click on the placed lance to re-collect it.

Rule Breaker

Acquired through the use of the Probability Alter spell, this dagger allows the user to control their personal probability through the Modulus and Dividend of the dagger. While the modulus is set at creation, the dagger’s dividend can be increased by shift right clicking. Specifically, when right clicking with Rule Breaker, the caster will receive a timed buff that returns a specific random number when requested from the player.

Furthermore, this effect is also applied when hitting things with the dagger.

Scrying

A Scrying circle on the ground allows the player to see a named mob or player from afar, for a short amount of time. Simply drop a nametag on the circle, and if a mob or player with this name exists, it will be shown with its surroundings.

It drains mana from the caster per nametag.

Selective Displacement

Use this scroll to receive a buff. While active, tap the0 keybind to swap places with a target entity. Alternatively, hold the keybind to select two entities, and switch them instead.

There is a short cooldown between swaps. This scroll costs mana.

Shared Vision

When used on a mob or player, the caster will see through its eyes.

It drains mana from the caster on use.

Spatial Disorientation

Using this scroll summons a staff which can be used on an entity to launch them in the direction the caster is looking. Longer charge time provides more velocity. Alternatively, when used on a block, nearby entities will be pulled in and launched, after a charge up time. It drains mana from the caster on use of the scroll, mana when used on an entity, and mana per second when used in AOE mode.

Strengthening

A Strengthening scroll will strengthen the first thing on your hotbar, or your off-hand if you’re holding something. Strengthened items are temporarily unbreakable, do more damage, and have increased mining capabilities.

It drains mana from the caster on use.

Summon Familiar

When used, the player summons a familiar. This familiar will report on interesting players, mobs, and blocks that it sees, and will chunk load the area around it. You can right click a familiar with a block to make it only report that block if it finds one. Right clicking without a block will reset this.

It drains mana on use.

Tangible Boundary

The Tangible Boundary is a large invisible barrier with range that you can pass through, but mobs, arrows, and other entities cannot. It will not replace solid blocks other than grass, nor will it replace water.

It drains mana from the caster every second(s).

Treasury Projection

This scroll give the user a gauntlet which will project weapons and tools from the user’s treasury - their inventory, some modded bags, and their ender chest, and fling them at the target block they are looking at.

It drains mana on using the scroll, and mana per weapon projected.

The gauntlet has two other modes upon pressing shift right-click. In AOE mode, weapons will be fired from behind you towards the direction you’re looking at, and in Chains mode, chains will spawn near the target you’re looking at and, if the target is a creature, attempt to hit them when right-click is held while staring at it.

Weapon Projectiles

Using this scroll grants the caster a bow, which can shoot tools and weapons.

It drains mana from the caster on use of the scroll.

Mahou | CurseForge

\ No newline at end of file diff --git a/atm6/mahou/caliburn/index.html b/atm6/mahou/caliburn/index.html new file mode 100644 index 0000000..28cbfdb --- /dev/null +++ b/atm6/mahou/caliburn/index.html @@ -0,0 +1,12 @@ + Caliburn - All The Guides

Caliburn

Step 4

Allocate three large areas to your Mahou Tsukai adventure (I use a 19x19 area for the Mahou lake, a 10x10 area for the mob damage farm, and a 11x9 area for the villager kill farm)

Step 5. Enchant a diamond sword

Note: The more Smite levels your sword has, the greater the base damage the Caliburn will have.

Step 6. Creating The Lake

After you have gathered enough Mahou Tsukai Mana (about 10,000, or a full Attuned Diamond) you are ready to place A Blood Circle in the center of your 19x19 area. Fill this Blood Circle with two Powdered Diamond, and One Powdered Emerald (FROM MAHOU!) Once the Lake is fully formed, there will be FOG!

Drop your enchanted diamond sword in and ensure you have at-least 5000 Mana. Search for the Caliburn in the lake to retrieve it!

Attuned Diamond / Emerald

Acts as Mana capacitors. Mana slowly decreases over time - Attuned Diamond / Emerald store unused Mana for later use (Mana in these do not decrease over time)

Continue To Morgan

Mahou Tsukai | CurseForge

\ No newline at end of file diff --git a/atm6/mahou/durabilityexchange/index.html b/atm6/mahou/durabilityexchange/index.html new file mode 100644 index 0000000..02e3eaf --- /dev/null +++ b/atm6/mahou/durabilityexchange/index.html @@ -0,0 +1,12 @@ + Durability Exchange - All The Guides

Durability Exchange

Obsidian Sheaders have over a million durability, but Mahou Tsukai caps durability exchange at like 2,500 durability but the recipe is cheap and easy so that’s why I use it since each Durability Exchange spell circle can restore a maximum of 10 mana per second, you will need a large amount of spell circles and chests for you to be able to gain the mana you need to efficiently swing your Morgan at villagers for damage gain

Mahou | CurseForge

\ No newline at end of file diff --git a/docs/atm6/mahou/img/boundaryOfDrainLife.png b/atm6/mahou/img/boundaryOfDrainLife.png similarity index 100% rename from docs/atm6/mahou/img/boundaryOfDrainLife.png rename to atm6/mahou/img/boundaryOfDrainLife.png diff --git a/docs/atm6/mahou/img/boundaryOfDrainLifeProjection.png b/atm6/mahou/img/boundaryOfDrainLifeProjection.png similarity index 100% rename from docs/atm6/mahou/img/boundaryOfDrainLifeProjection.png rename to atm6/mahou/img/boundaryOfDrainLifeProjection.png diff --git a/docs/atm6/mahou/img/craftDagger.png b/atm6/mahou/img/craftDagger.png similarity index 100% rename from docs/atm6/mahou/img/craftDagger.png rename to atm6/mahou/img/craftDagger.png diff --git a/docs/atm6/mahou/img/drawMahoujin.png b/atm6/mahou/img/drawMahoujin.png similarity index 100% rename from docs/atm6/mahou/img/drawMahoujin.png rename to atm6/mahou/img/drawMahoujin.png diff --git a/docs/atm6/mahou/img/durabilityExchange.png b/atm6/mahou/img/durabilityExchange.png similarity index 100% rename from docs/atm6/mahou/img/durabilityExchange.png rename to atm6/mahou/img/durabilityExchange.png diff --git a/docs/atm6/mahou/img/humanity.png b/atm6/mahou/img/humanity.png similarity index 100% rename from docs/atm6/mahou/img/humanity.png rename to atm6/mahou/img/humanity.png diff --git a/docs/atm6/mahou/img/iRejectMy.png b/atm6/mahou/img/iRejectMy.png similarity index 100% rename from docs/atm6/mahou/img/iRejectMy.png rename to atm6/mahou/img/iRejectMy.png diff --git a/docs/atm6/mahou/img/mahouBloodProjection.png b/atm6/mahou/img/mahouBloodProjection.png similarity index 100% rename from docs/atm6/mahou/img/mahouBloodProjection.png rename to atm6/mahou/img/mahouBloodProjection.png diff --git a/docs/atm6/mahou/img/mahouLake.png b/atm6/mahou/img/mahouLake.png similarity index 100% rename from docs/atm6/mahou/img/mahouLake.png rename to atm6/mahou/img/mahouLake.png diff --git a/docs/atm6/mahou/img/mahouManaBar.png b/atm6/mahou/img/mahouManaBar.png similarity index 100% rename from docs/atm6/mahou/img/mahouManaBar.png rename to atm6/mahou/img/mahouManaBar.png diff --git a/docs/atm6/mahou/img/mahouManaGen.png b/atm6/mahou/img/mahouManaGen.png similarity index 100% rename from docs/atm6/mahou/img/mahouManaGen.png rename to atm6/mahou/img/mahouManaGen.png diff --git a/docs/atm6/mahou/img/mahouTsukaiCompendium.png b/atm6/mahou/img/mahouTsukaiCompendium.png similarity index 100% rename from docs/atm6/mahou/img/mahouTsukaiCompendium.png rename to atm6/mahou/img/mahouTsukaiCompendium.png diff --git a/docs/atm6/mahou/img/morgan.png b/atm6/mahou/img/morgan.png similarity index 100% rename from docs/atm6/mahou/img/morgan.png rename to atm6/mahou/img/morgan.png diff --git a/docs/atm6/mahou/img/obsidianShears.png b/atm6/mahou/img/obsidianShears.png similarity index 100% rename from docs/atm6/mahou/img/obsidianShears.png rename to atm6/mahou/img/obsidianShears.png diff --git a/docs/atm6/mahou/img/powerConsolidation.png b/atm6/mahou/img/powerConsolidation.png similarity index 100% rename from docs/atm6/mahou/img/powerConsolidation.png rename to atm6/mahou/img/powerConsolidation.png diff --git a/docs/atm6/mahou/img/ripWolf.png b/atm6/mahou/img/ripWolf.png similarity index 100% rename from docs/atm6/mahou/img/ripWolf.png rename to atm6/mahou/img/ripWolf.png diff --git a/docs/atm6/mahou/img/rsSetup1.png b/atm6/mahou/img/rsSetup1.png similarity index 100% rename from docs/atm6/mahou/img/rsSetup1.png rename to atm6/mahou/img/rsSetup1.png diff --git a/docs/atm6/mahou/img/rsSetup2.png b/atm6/mahou/img/rsSetup2.png similarity index 100% rename from docs/atm6/mahou/img/rsSetup2.png rename to atm6/mahou/img/rsSetup2.png diff --git a/docs/atm6/mahou/img/villagerKillExample.mp4 b/atm6/mahou/img/villagerKillExample.mp4 similarity index 100% rename from docs/atm6/mahou/img/villagerKillExample.mp4 rename to atm6/mahou/img/villagerKillExample.mp4 diff --git a/docs/atm6/mahou/img/villagerSpawner.png b/atm6/mahou/img/villagerSpawner.png similarity index 100% rename from docs/atm6/mahou/img/villagerSpawner.png rename to atm6/mahou/img/villagerSpawner.png diff --git a/docs/atm6/mahou/img/wirelessTransmitter.png b/atm6/mahou/img/wirelessTransmitter.png similarity index 100% rename from docs/atm6/mahou/img/wirelessTransmitter.png rename to atm6/mahou/img/wirelessTransmitter.png diff --git a/docs/atm6/mahou/img/wirelessTransmitterGui.png b/atm6/mahou/img/wirelessTransmitterGui.png similarity index 100% rename from docs/atm6/mahou/img/wirelessTransmitterGui.png rename to atm6/mahou/img/wirelessTransmitterGui.png diff --git a/atm6/mahou/index.html b/atm6/mahou/index.html new file mode 100644 index 0000000..d7f6ea2 --- /dev/null +++ b/atm6/mahou/index.html @@ -0,0 +1,12 @@ + Mahou - All The Guides

Mahou

Mahou Tsukai Morgan and You, Originally created by Xarrah, BigFire, & Ultramega

Step 1: Set your keybinds for Draw Mahoujin (mine is set to numberpad 3)

Step 2: Craft a Dagger (From Mahou Tsukai)

  1. Use the dagger (hold in main hand and right click anywhere) to inflict ‘Bleeding’ (lasts 15 seconds)
  2. Quickly slap the hotkey you’ve assigned your ‘Draw Mahoujin’ keybinding to

This will create a Mahou blood projection!

For each Boundary of Drain Life, you will need:

  • 2 Powdered Iron
  • 1 Powdered Emerald (From MAHOU! NOT DUSTS)

Step 3: Discover Blood Projections

Right click the blood projection with the two Powdered iron, and one powdered emerald. Then right click to activate

Notes

Fastest to set up is probably durability drain, where you cycle a bunch of low tier gear/tools across a bunch of chests, and set your storage system to keep them in stock (or pipe them out right before they break to a diamond anvil) - BigFire

another one is the popular life drain with mob farm. you’d probably want 20-40 of these circles down and a really quick spawner. need good garbage collection and xp collection for this else it’ll lag/crash server. also not so good for server performance - BigFire

Continue To Caliburn

Mahou | CurseForge

\ No newline at end of file diff --git a/atm6/mahou/mana/index.html b/atm6/mahou/mana/index.html new file mode 100644 index 0000000..d4c6e5c --- /dev/null +++ b/atm6/mahou/mana/index.html @@ -0,0 +1,12 @@ + Mana - All The Guides

Mana

Top left you should see a Mahou manu bar. If not run /showmahou

Step 8. Create an enclosure for Mahou Mana generation

  • Ethereal Glass is solid for mobs, but players can pass through it.
  • Conveyor Belts push the mobs into the Mahou spell circles (that damage them for mana)
  • Wireless Redstone Reciever is used to toggle the mob spawner on from a distance. (spawner must have redstone comparator upgrade)
  • Absorption Hopper sucks up the mob drops and experience orbs. (it is recommended to hook up a tank for the absorption hopper to deposit liquid XP into)
  • Item Pipez move the drops from the absorption hopper into the trash cans. (My item pipe has an Ultimate Pipe Upgrade inside for quick item transfering)
  • Dark Connected glass prevents light from passing through and makes for a clear viewing window

The purpose of this farm is to drop mobs onto the Mahou damage spell circles, where they lose life (this gains you mana and increases your mana cap since the spell circles use 5 mana per 1 second) and then trash the drops (optional).

Image has 36 Boundary of Drain Life spell circles (6x6).

Step 9. Create an enclosure for your Villager spawner

  • My enclosure uses Solid Dark Zychorium Bricks and Dark Connected Glass, but any blocks may be used (as with the Mahou Mana Generation enclosure)
  • I have a Wireless Restone Reciever attached to the Villager spawner; the spawner is upgraded with a Redstone Comparator
  • Use GPS Data Cards on the Wireless Redstone Recievers to link the Wireless Transmitter so that the Lever starts up both the Mana Generation Farm and the Villager Spawner - this will increase your mana (and cap) at the same time as you kill villagers for the Morgan.

Mahou | CurseForge

\ No newline at end of file diff --git a/atm6/mahou/morgan/index.html b/atm6/mahou/morgan/index.html new file mode 100644 index 0000000..52bee62 --- /dev/null +++ b/atm6/mahou/morgan/index.html @@ -0,0 +1,12 @@ + Morgan - All The Guides

Morgan

Rejecting Humanity


Step 7. Kill a Tamed Wolf with the Caliburn


Congratulations! You have a Morgan!

Increase your Morgan’s Attack Damage by killing villagers (you must actively have or be generating Mana)

Continue To Mana

Mahou | CurseForge

\ No newline at end of file diff --git a/atm6/mekanism/index.html b/atm6/mekanism/index.html new file mode 100644 index 0000000..0515536 --- /dev/null +++ b/atm6/mekanism/index.html @@ -0,0 +1,29 @@ + Mekanism - All The Guides

Mekanism

To get started in Mekanism you just need coal, osmium, redstone and iron to make some steel. The Official Mekanism Wiki has a lot of information on the setup of machines and how they can be used. Also, the Surviving with Mekanism series by RagePlaysGames is top notch! Every video has chapters so you can easily skip to the section you need, and each video is divided into intro, mats, crafting, building, and how to use. You can’t go wrong.

Fission Reactor Diagram
graph TD
+W(((Water))) --> ES_O[Electrolytic Separator]
+S(((Sulfur))) --> CO_SD[Chemical Oxidizer]
+U(((Uranium)))
+ES_O -- Oxygen --> CO_SD -- Sulfur Dioxide --> CI_ST[Chemical Infuser]
+W --> RC_WV[Rotary Condensentrator]
+CI_ST -- Sulfur Trioxide --> CI_SA[Chemical Infuser]
+RC_WV -- Water Vapor --> CI_SA
+F(((Fluorite))) --> CDC_HA[Chemical Dissolution Chamber]
+CI_SA -- Sulfuric Acid --> CDC_HA
+CDC_HA -- Hydrofluoric Acid --> CI_UH[Chemical Infuser]
+
+U ----> EC_YCU[Electrolytic Separator]
+EC_YCU -- Yellow Cake Uranium --> CO_UO[Chemical Oxidizer]
+CO_UO -- Uranium Oxide --> CI_UH
+
+CI_UH -- Uranium Heaxfluoride --> IC_FF[Isotopic Centrifuge]
+IC_FF -- Fissile Fuel --> R{REACTOR}

Accidentally leaked radiation? /mek radiation removeAll, /mek radiation heal

Mekanism | CurseForge

\ No newline at end of file diff --git a/atm6/pedestals/index.html b/atm6/pedestals/index.html new file mode 100644 index 0000000..cbe404e --- /dev/null +++ b/atm6/pedestals/index.html @@ -0,0 +1,12 @@ + Pedestals - All The Guides

Pedestals

The mod that can do just about anything.... But how?

Linking Tool

With a diamond and some dye, your first step into pedestals is the linking tool. This tool will allow you to make blank pedestals and blank upgrades for the pedestal

Cobblestone Generator

Your next step should be the cobblegen. Place a pedestal and put the cobblegen upgrade in your offhand and then right-click the pedestal to apply it. If you want to link two pedestals, shift right-click with the linking tool on the recieving pedestal and then do the same to the sending pedestal.

Enchanting

Force Enchanting

Pedestals | CurseForge

\ No newline at end of file diff --git a/atm6/silentgear/index.html b/atm6/silentgear/index.html new file mode 100644 index 0000000..7855625 --- /dev/null +++ b/atm6/silentgear/index.html @@ -0,0 +1,12 @@ + Silent Gear - All The Guides

Silent Gear

The possibilities are endless with Silent Gear. The examples below simply show a few possibilities, out of the thousands of potential combinations.

Blueprints

Silent Gear can be very simple or very complex. Make yourself a blueprint and then surround that blueprint with mats needed. For example, if you have a pickaxe blueprint, you will need the blueprint, handle and 3 ingots. The materials used and order matter very much!

Beyond The Basics

Check out these links for some additional information on material and additional guides.

Material Spreadsheet | General Silent Gear Info | Early Game Tools | Late Mid Game Tools |

Custom Constructions

Fireite Uru Paxel

paxel tooltip

Fireite Uru Katana

katana tooltip

Fireite Uru Sword

sword tooltip

Fireite Uru Machete

machete tooltip

Fireite Uru Bow

bow tooltip

Gem & Ingot

gem and ingot tooltip

Silent Gear | CurseForge

\ No newline at end of file diff --git a/atm6/sky/dragons/index.html b/atm6/sky/dragons/index.html new file mode 100644 index 0000000..2bd6aaa --- /dev/null +++ b/atm6/sky/dragons/index.html @@ -0,0 +1,12 @@ + Dragons - All The Guides

Dragons

\ No newline at end of file diff --git a/atm6/sky/faq/index.html b/atm6/sky/faq/index.html new file mode 100644 index 0000000..7d14244 --- /dev/null +++ b/atm6/sky/faq/index.html @@ -0,0 +1,12 @@ + F.A.Q - All The Guides

F.A.Q

Question Answer
How do I get started? If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide. \
Is there a list of mods? Yes, on CurseForge
Where can I find AllTheModium, Vibranium, & Unobtanium? Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book.
World Type level-type=skyblockbuilder\:custom_skyblock
Commands (More on Github) Create Island: /skyblock create, TP to Island: /skyblock home, TP to Spawn: /skyblock spawn.
\ No newline at end of file diff --git a/atm6/sky/index.html b/atm6/sky/index.html new file mode 100644 index 0000000..c15f08f --- /dev/null +++ b/atm6/sky/index.html @@ -0,0 +1,12 @@ + All The Mods 6 - To The Sky - All The Guides

ATM6 - To The Sky

All The Mods 6 - To The Sky | CurseForge | GitHub

\ No newline at end of file diff --git a/atm6/woot/index.html b/atm6/woot/index.html new file mode 100644 index 0000000..23a5a66 --- /dev/null +++ b/atm6/woot/index.html @@ -0,0 +1,12 @@ + Woot - All The Guides

Woot

Woot | CurseForge

\ No newline at end of file diff --git a/docs/atm7/img/atm7LiteLogo.png b/atm7/img/atm7LiteLogo.png similarity index 100% rename from docs/atm7/img/atm7LiteLogo.png rename to atm7/img/atm7LiteLogo.png diff --git a/docs/atm7/img/atm7Logo.jpg b/atm7/img/atm7Logo.jpg similarity index 100% rename from docs/atm7/img/atm7Logo.jpg rename to atm7/img/atm7Logo.jpg diff --git a/atm7/index.html b/atm7/index.html new file mode 100644 index 0000000..e9608e5 --- /dev/null +++ b/atm7/index.html @@ -0,0 +1,12 @@ + All The Mods 7 - All The Guides

All The Mods 7

All The Mods 7 | CurseForge | GitHub

\ No newline at end of file diff --git a/atm7/lite/index.html b/atm7/lite/index.html new file mode 100644 index 0000000..8445559 --- /dev/null +++ b/atm7/lite/index.html @@ -0,0 +1,12 @@ + All The Mods 7 Lite - All The Guides

All The Mods 7 - Lite

All the Mods started out as a private pack for just a few friends of whatthedrunk’s that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

With a selection of classic favourites and newly discovered mods, ATM7 Lite aims to have excellent performance on all machines whilst still being packed with content.

For those with an itch to build an amazing factory, we have Create and Immersive Engineering for setting up complex systems that look great, Customize your weapons and tools using either Silent Gear or Tinkers Construct, or settle for looting some epic gear from the Apotheosis bosses that will spawn in your world, Found a Civilization with Minecolonies, Or perhaps a remote tower to privately plot your progression through Ars Magica Legacy, BloodMagic, or Mahou Tsukai? The choices are many, and more importantly, yours!!

Recipe modification has been kept to a bare minimum, aiming to avoid recipe conflicts only.

Does “All the Mods 7 Lite” really contain ALL THE MODS? No, of course not. This is a lite pack after all

All The Mods 7 - Lite | CurseForge | GitHub

\ No newline at end of file diff --git a/atm7/sky/index.html b/atm7/sky/index.html new file mode 100644 index 0000000..ce265d3 --- /dev/null +++ b/atm7/sky/index.html @@ -0,0 +1,12 @@ + All The Mods 7 - To The Sky - All The Guides

All The Mods 7 - To The Sky

All the Mods 7 To the Sky is the sequel to the popular atm6 sky, we have taken feedback from the first iteration to make this pack the best we have to offer, adding in mods that were not in the first such as Twilight Forest and Alchemistry, followed by the mod Ex Machinis, an automation addon for Ex Nihilo built in house by ATM to take you from early, all the way to end game automated resources.

All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 7 To the Sky we will continue the tradition adding many new mods whilst keeping to the quality of the first modpack

Does “All The Mods” really contain ALL THE MODS? No, of course not.

All The Mods 7 - To The Sky | CurseForge | GitHub

\ No newline at end of file diff --git a/atm8/apotheosis/index.html b/atm8/apotheosis/index.html new file mode 100644 index 0000000..62f9b8f --- /dev/null +++ b/atm8/apotheosis/index.html @@ -0,0 +1,12 @@ + Apotheosis - All The Guides

Apotheosis

Starting Setup (JEI REQUIRED)

Requirements

Recipes for the shelves in this guide WILL NOT BE PROVIDED. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with.

Seashelf Method

To start, make 16 Seashelf and place down all but one in a formation like the one below.

Once you’ve got those down, take your 16th Seashelf and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused Seashelf with your Infused Seashelf. Repeat this until all 16 Seashelf are Infused Seashelf. You will have 1 extra Infused Seashelf at the end.

You must be level 45+ to infuse Seashelves

After this, you’ll need to break 9 Infused Seashelf and make 2 Heart-Forged Seashelf and 7 Crystalline Seashelf. Place these down where the original 9 were.

Now, you will need to make 10 Dormant Deepshelf and infuse them to their Deepshelf varient. You should be able to infuse them with your current setup.

You must be level 60+ to infuse Dormant Deepshelves

After infusing all 10, make 5 Soul-Touched Deepshelf and 5 Echoing Deepshelf. Then, upgrade them to their Sculkshelf variant. Press U or right click on the respective shelf in JEI to see what the recipe is to upgrade them.

Now you’ll need to make 3 Shelf of End-Fused Rectification. This might require some work.

You will also need to make 1 Draconic Endshelf. To make the Infused Dragon’s Breath, place down the 10 Sculkshelves made earlier and add 10 Melonshelf. A setup for this can be seen below; the placement of the shelves does not have to be exact.

You must be level 80+ to infuse Dragon’s Breath

After making the Draconic Endshelf, remove all the Melonshelf. Place the 3 Shelf of End-Fused Rectification and the Draconic Endshelf in a similar formation as shown in the Seashelf image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example.


Infusion Setups

You do not have to place the blocks exactly as I do, these are just an example.

Unbreakable Potion Charms

5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf

Superior Sigil of Socketing

5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf

Tome of Superior Scrapping

3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf

Tome of Extraction

3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf

Library of Alexandria

7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf

Apotheosis | CurseForge

\ No newline at end of file diff --git a/docs/atm8/img/atm8Logo.png b/atm8/img/atm8Logo.png similarity index 100% rename from docs/atm8/img/atm8Logo.png rename to atm8/img/atm8Logo.png diff --git a/atm8/index.html b/atm8/index.html new file mode 100644 index 0000000..de958c7 --- /dev/null +++ b/atm8/index.html @@ -0,0 +1,12 @@ + All The Mods 8 - All The Guides

All The Mods 8

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 8 we will continue the tradition adding many new mods while going for more stability.

Does “All the Mods” really contain ALL THE MODS? No, of course not.

All The Mods 8 | CurseForge | GitHub

\ No newline at end of file diff --git a/atm8/mekanism/index.html b/atm8/mekanism/index.html new file mode 100644 index 0000000..52929cd --- /dev/null +++ b/atm8/mekanism/index.html @@ -0,0 +1,12 @@ + Mekanism - All The Guides

Mekanism

AE2 Mekanism Infuser Auto-Crafting

Using ME Pattern Providers, we can fully automate the Metallurgic Infuser (Left) and Enrichment Chamber (Right). This setup will only use 2 channels of your main network.

Materials
  • 1x Metalluric Infuser (higher the level, the better)
  • 1x Enrichment Chamber (higher, the better)
  • 1x Quartz Fiber
  • 8x AE2 Cables
  • 2x ME Pattern Provider (Block form)
  • 1x ME Interface (Panel form)
  • 2x ME Storage Bus
  • 8x Blank Patterns
Do you have Refined Obsidian automated already?

You can skip the Obsidian Dust filter on the left storage bus and the Refined Obsidian Dust Pattern and instead make a processing pattern to turn Refined Obsidian Ingots into Refined Obsidian Dust and put that in Pattern Provider connected to a Crusher.


Building and Configuring

  1. Put down your Metallurgic Infuser and place an ME Storage Bus on both sides of the infuser.
  2. Place an ME Pattern Provider right behind the infuser and put an ME Interface on top, then place a Quartz Fiber on the side.
  3. Place 7 AE2 cables (Yellow in the example) connecting all AE2 devices. The orange cable connects to your main AE2 network.

  1. Adjacent to the Infuser, place an Enrichment Chamber and a Pattern Provider behind it and place a cable connecting both pattern providers.

If you’re using the same colored cables, place a Cable Anchor between them or use a different color.


  1. Set the Infuser & Enrichment inputs/outputs like the images below.

The Infuser will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the Enrichment Chamber will input/output the back (Purple).

  1. For the ME Storage Buses item filters have Iron, Infused Alloy, Enriched Alloy, and Obsidian Dust on the left side and Enriched Redstone, Diamond, and Obsidian on the right.

Processing Patterns

Now, we’ll encode the Processing Patterns. These patterns are made so there will be a (essentially) 0% chance of clogging the Infuser due to leftover materials.

Make sure to set the patterns to Process (Furnace icon) instead of Crafting (Crafting Table icon).

  • 8 Iron + 1 Enriched Redstone = 8 Infused Alloy
  • 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy
  • 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy
  • 1 Obsidian = 4 Obsidian Dust
  • 1 Redstone = 1 Enriched Redstone
  • 1 Diamond = 1 Enriched Diamond
  • 1 Refined Obsidian Dust = 1 Enriched Obsidian
  • 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust

Then you’ll put patterns in each pattern provider as shown below.

Make sure to give both machines power and to enabled Auto-Split.

Mekanism | CurseForge

\ No newline at end of file diff --git a/atm8/mysticalagriculture/index.html b/atm8/mysticalagriculture/index.html new file mode 100644 index 0000000..4a10a4f --- /dev/null +++ b/atm8/mysticalagriculture/index.html @@ -0,0 +1,12 @@ + Mystical Agriculture - All The Guides

Mystical Agriculture

Farm Designs

AlfredGG’s Farm

My Watering Can/Scythe isn’t working

Mystical Agriculture doesn’t allow fake players by default. The config can be changed in config/mysticalagriculture-common.toml -> fakePlayerWatering = true.

My Modular Routers aren’t working

You will need to add a Security Upgrade since you are working in a claimed chunk (even though it’s yours)

KJM’s Full-Auto Phytogenic Insolator with AE2

Full setup using all 32 channels of a dense cable per wall

Requirements

Minimum Building Materials
  • These materials set the ground work to build the full thing.
  • 3x ME Interface
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 2x AE2 Crafting Card
  • 2x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 8x of another different colored Dense cable (Examples are using Orange dense cables)
All Building Materials
  • 129x ME Interfaces
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 128x AE2 Crafting Card
  • 256x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 68x of another different colored Dense cable (Examples are using Orange dense cables)

Each image has a caption that shows when you click on it that you can read if you are stuck.

This farm requires a general understanding of AE2 and Thermal Series

The “Brain”

First I’ll show you how to build the “brain” of those whole system. You can place it above everything (like in the image above) or underneath the floor.

  1. Place a Sink/Eternal Water Block and an ME Interface on the corners of a Quantum Ring and then place 2x Quartz Fibers/Cable Anchors between the Sink and ME Interface and on the center of the Quantum Ring.
  2. Then place your 2x colored cables (Lime cables) on top of them along with an ME Controller.
  3. The 1x colored cable (Magenta cable) should connect the quantum ring and the ME Interface.
  • Make sure to link your Quantum Rings.

Make sure to put quartz fiber or cable anchors to isolate the Lime cable from your home AE2 system

  1. Place 2x ME Storage Bus on the ME Interface and Sink, facing each other.

ME Storage Bus on both the Sink and ME Interface

  1. Have the ME Interface stock Water and Phyto-Gro and set the priority to -1. ME Interface settings

  2. For the ME Storage Bus on the Sink settings, have the Input/Output Mode to Extract Only and put Water in the filter by dragging it from JEI. Storage Bus on sink settings


The Modules

Now we’ll build one of the “modules” that make up the entire thing. Each column of Phyto/Interface pairs is 8 blocks tall since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable.

  1. Each module consists of 2 Phytos next to each other and an ME Interface on each side.

1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90° to one side depending on which corner it’s on.

  1. For the ME Interface, put a Crafting Card in and set Water and Phyto-Gro in the filter by dragging it from JEI.

  2. For the Phytos it’ll be slightly different depending on which side the ME Interface is on. You will have it Auto Input/Output the side touching the interface. The image below is for a phyto with an interface to the left.

  3. Each Phyto will have 1x Draconic Integral Component & 3x Twinite Flux Linkages. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these.

Why not use Shellite instead of Twinite? KJM explains

The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component.

You’ll stack these modules to a maximum of 8 tall and arrange them into 4 walls.

Tips
  • Use an AE2 Memory Card to copy ME Interface settings (Shift + R-Click to Copy, R-Click to Paste)
  • Use Redprint to copy Phytogenic Insolator settings (R-Click to Copy and to Paste)

Connecting and Powering

You’ll put your Colored Dense Cables in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos.

Mystical Agriculture | CurseForge

\ No newline at end of file diff --git a/atm9/allthemodium/index.html b/atm9/allthemodium/index.html new file mode 100644 index 0000000..1e01abd --- /dev/null +++ b/atm9/allthemodium/index.html @@ -0,0 +1,12 @@ + AllTheModium - All The Guides

AllTheModium

In ATM9, All The Modium has changed in ways different from previous packs. We’ll explain where to find, how to obtain, and how Templates works to craft armor & tools!

Where & How

AllTheModium ores can be found across 3 dimensions: Overworld, Nether, and The End, normally exposed to AIR.

  • AllTheModium: (Overworld)
    • Found in Deep Dark Biome, also in Mining Dimension Deep Slate layer (Y 65-129).
      • Mining Dimension is more rare, at-least 1 ore per chunk.
      • Killing Warden also grants a Quest reward ATM Ingot.
    • Obtained with a Netherite level pick or better.
  • Vibranium: (Nether)
    • Found in Nether dimension (no longer biome specific).
      • Elevation between Y 64-127
    • Also Found between Y 0-40 within The Other dimension.
    • Obtained with an AllTheModium level pick or better.
  • Unobtainium: (End)
    • Found within End Highlands.
      • More rare than other ores
    • Obtained with Vibranium level pick or better

Ores Can Only Be Mined By A ‘Real Player’

Templates

  • AllTheModium:
    • Found in Sus Clay in Ancient Cities within the Overworld.

  • Vibranium:
    • Found in Sus SoulSand in Bastions within the Nether.

  • Unobtainium:
    • Found in The Other dimension, as chest loot in the underground library of allthemodium:dungeon structure.

Smithing Recipe Example

Template Armor Ingot Output
\ No newline at end of file diff --git a/atm9/apotheosis/index.html b/atm9/apotheosis/index.html new file mode 100644 index 0000000..8c50831 --- /dev/null +++ b/atm9/apotheosis/index.html @@ -0,0 +1,12 @@ + Apotheosis - All The Guides

Apotheosis

Kaimonick’s Apotheosis Overview

Click here to view Kai’s guide!

Starting Enchanting Setup

Requirements

Recipes for the shelves in this guide WILL NOT BE PROVIDED. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with.

Seashelf Method

To start, make 16 Seashelf and place down all but one in a formation like the one below.

Once you’ve got those down, take your 16th Seashelf and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused Seashelf with your Infused Seashelf. Repeat this until all 16 Seashelf are Infused Seashelf. You will have 1 extra Infused Seashelf at the end.

You must be level 45+ to infuse Seashelves

After this, you’ll need to break 9 Infused Seashelf and make 2 Heart-Forged Seashelf and 7 Crystalline Seashelf. Place these down where the original 9 were.

Now, you will need to make 10 Dormant Deepshelf and infuse them to their Deepshelf varient. You should be able to infuse them with your current setup.

You must be level 60+ to infuse Dormant Deepshelves

After infusing all 10, make 5 Soul-Touched Deepshelf and 5 Echoing Deepshelf. Then, upgrade them to their Sculkshelf variant. Press U or right click on the respective shelf in JEI to see what the recipe is to upgrade them.

Now you’ll need to make 3 Shelf of End-Fused Rectification. This might require some work.

You will also need to make 1 Draconic Endshelf. To make the Infused Dragon’s Breath, place down the 10 Sculkshelves made earlier and add 10 Melonshelf. A setup for this can be seen below; the placement of the shelves does not have to be exact.

You must be level 80+ to infuse Dragon’s Breath

After making the Draconic Endshelf, remove all the Melonshelf. Place the 3 Shelf of End-Fused Rectification and the Draconic Endshelf in a similar formation as shown in the Seashelf image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example.


Infusion Setups

You do not have to place the blocks exactly as I do, these are just an example.

Unbreakable Potion Charms

5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf

Superior Sigil of Socketing

5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf

Tome of Superior Scrapping

3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf

Tome of Extraction

3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf

Library of Alexandria

7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf


Infused Teleportation Core Setups

Below are the setups to make each infused teleportation core that are needed for the ATM Star. Each setup has 2 variants, one that only uses shelves from the max enchanting setup and one that use other shelves to get the same result. Use whichever is easiest for you.

Nether

10x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf

8x Glowing Hellshelf, 8x Hellshelf, 3x Melonshelf, 2x Echoing Deepshelf, 1x Draconic Endshelf

Ender

4x Draconic Endshelf, 3x Melonshelf, 2x Echoing sculkshelf, 1x Soul-Touched Sculkshelf

4x Draconic Endshelf, 2x Echoing Deepshelf, 2x Glowing Hellshelf, 2x Infused Seashelf, 1x Stoneshelf, 1x Melonshelf

Draconic

7x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf, 1x Draconic Endshelf

8x Deepshelf, 4x Echoing Deepshelf, 2x Draconic Endshelf, 1x Melonshelf, 1x Oak Bookshelf


Spawner Changes

  • Remove AI: Chorus Fruit Golden Apple
  • Ignore Players: Nether Star Conduit
  • Increase Entities: Ghast Tears | Max 32 16
  • Increase Spawn Count: Fermented Spider’s Eye Piglich Heart | Max 16 8
  • Decrease Minimum Spawn Delay: Sugar AllTheModium Ingot | Min 20 100
  • Decrease Maximum Spawn Delay: Clock Unobtainium Ingot | Min 20 100

The aim of these changes are to make removing AI easier, give Conduits more of a use, encourage people to look out for good spawners in the world, and bring spawners more in line with the other options available for farming mob drops, like Hostile Neural Networks or Mystical Agriculture or Productive Bees WannaBee mob farms.

Apotheosis | CurseForge

\ No newline at end of file diff --git a/atm9/extremereactors/index.html b/atm9/extremereactors/index.html new file mode 100644 index 0000000..efba353 --- /dev/null +++ b/atm9/extremereactors/index.html @@ -0,0 +1,17 @@ + Extreme Reactors - All The Guides

Extreme Reactors

Extreme Reactors is a custom sized multi-block reactor for power generation, similar to Bigger Reactor & Big Reactor.

Setups and Sizes

Object Max Height (Y) Max Size (X/Z)
Basic Reactor 5 5
Hardened Reactor 48 32
Turbine 32 32
Fluidizer 16 16

FunshineX has made a very detailed video going over all the different sizes of reactors, efficiencies, placement of moderators, and turbine setups. Your RF/t numbers will be higher than his numbers in the video due to the Power Gen Changes mentioned above.

Some additional information regarding other aspects on how the turbines work and other tips specific to ATM.

Disastrous_Site_6352 via Reddit

  • Wider is more efficient than taller for fuel.
  • The most efficient setup for rods is a checkerboard pattern with three spaces between the outermost rod and the interior wall. Heat manifolds placed on the interior walls of the reactor also in a checkerboard pattern in the cardinal directions of any rods (North, South, East, West).
  • Passive cooled reactors generate rf, active cooled with water produces steam for turbines. You will need to run passive for a while to produce cyanite for blutonium to make turbines.
  • One actively cooled reactor can produce enough steam for several turbines.
  • Liquid sodium from Mekanism can be used to actively cool the reactor, making superheated liquid sodium then pumping it into a heat exchanger to produce even more steam powers even more turbines.
  • Heat exchanger setup isn’t really necessary in atm because of other more efficient setups for power. It’s much like creating 5x ore processing in a modpack with mystical agriculture, fun but overkill.

Moderators

Moderator FE/t % of top μB/t
Air 13,406 91.23% 198
Dry Ice 13,525 92.06% 198
Iron 13,862 94.34% 190
Manasteel 13,912 94.68% 191
Lead 14,277 97.16% 187
Graphite 14,342 97.60% 182
Tangerium 14,422 98.15% 184
Electrum 14,466 98.45% 187
Emerald 14,475 98.51% 184
Cryomisi 14,502 98.69% 186
Elementium 14,527 98.86% 185
Diamond 14,573 99.18% 184
Terrasteel 14,625 99.53% 185
Netherite 14,629 99.56% 183
Redfrigium 14,694 100.00% 181

Computer Craft Integration

You can use Computer Craft with scripts such as Kasra-G’s Automated Reactor Controller to easily automate your reactor with the Reactor Computer Port. There are other Computer Craft scripts that will integrate with Extreme Reactor Turbines as well.

You must enable HTTP API for Computer Craft Integration

To pull the script above as outlined in the repo’s instructions, you must edit the following file:
/YOURWORLDNAME/defaultconfigs/computercraft-server.toml

Search for http and make sure it is set to enabled = true as shown below.

computercraft-server.toml
    [http]
+        #Enable the "http" API on Computers. Disabling this also disables the "pastebin" and
+        #"wget" programs, that many users rely on. It's recommended to leave this on and use
+        #the "rules" config option to impose more fine-grained control.
+        enabled = true
+

Your server must be off when changing this file. If you edit it while it is running, the changes will not apply.


Power Gen Changes

Overall Power Gen: 1x 3x | 53 can produce ~15k RF/t

Extreme Reactors | CurseForge

\ No newline at end of file diff --git a/atm9/faq/index.html b/atm9/faq/index.html new file mode 100644 index 0000000..7c3f8cb --- /dev/null +++ b/atm9/faq/index.html @@ -0,0 +1,12 @@ + ATM9 FAQ - All The Guides

FAQ

All The Mods 9 Frequently Asked Questions


Gameplay FAQs
Why can’t I use modular router and watering can?

By default, Mystical Agriculture does not allow fake players to automate watering cans. If you dislike this change, it can be changed within config/mysticalagriculture-common.toml > fakePlayerWatering = true.

Do I need to chunkload all the chunks my Chunk Destroyer is going to mine?

You do not need to load chunks you’re mining. You only need to chunkload the chunk the Chunk Destroyer is in.

How do I remove enchants from a book/weapon?
  • Drop an anvil onto Obsidian with the enchanted book/weapon along with Books for each separate enchantment (EX: You have a book with 3 different enchants, you’d need 3 books to split those enchants).
  • Enchant the anvil with Splitting (Only splits books/weapons with 1 enchant) or Obliteration (Splits any number of enchants)
  • Use the Enchantment Extractor from Industrial Foregoing. Provide it with Books and Power, and it will extract each enchantment on all enchanted items/books to singular books. It can also be configured to push extracted enchantments into the Enchantment Library from Apotheosis.
What’s the little 3D cube next to my crosshair?

It’s from Quark, the default keybind to toggle it is K.

How do I find ‘insert name’ biome?

Nature’s Compass is a really nice tool to find any and all biomes in the modpack. Craft it, right click with it in your hand, and you can run the search for any biome you are looking for (such as the Deep Dark).

How do I change /home, /tpa etc cooldown?

To change the behavior of /home or to re-enable /back and /rtp, edit saves/worldName/serverconfig/ftb-essentials.snbt. The world/server has to be stopped for the changes to take effect.

Why is flight disabled?

Flight is disabled in certain dimensions (The Other, Blue Skies, and Twilight Forest), to add more difficulty towards progression. If you dislike this change, it can be disabled in worldName/serverconfig/noflyzone.snbt

Technical FAQs
I can’t complete ‘name of quest’ even though I fufilled the requirements?

You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it’s progress if you still have the items.

I have my chunks force loaded, but they don’t run when I’m logged off.
  1. Press M to open the map.
  2. Press Ctrl+S to open the server settings (requires OP).
  3. Change Forceloading Mode to always.
What’s the difference between ATM9 and ATM9: No Frills?

Here is a comparison

Why isn’t ‘insert name’ mod in ATM9 yet?

ATM packs does not literally contain “All The Mods”. Our main focus is having mods that’s not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version 1.20.1, and Forge (Not NeoForge), you may make a suggestion.

I found a bug/dupe in the pack. How can I report it?

To report bugs, dupes or similar, head over to the ATM9 GitHub and open a new issue describing the occurrence.

What are the recommended Java arguments for this pack?
  • Client arguments: send ?args in the #bot-spam channel in our Discord.
  • Server arguments: send ?svargs in the #bot=spam channel in our Discord.
Why does my game crash while launching?

Lack of RAM most likely. Send ?allocate in the #bot-spam channel in our Discord to learn how to allocate more RAM. If that’s not the problem, head to #atm9-techsupport and send ?logs to see how to upload your crash/latest log.

I crashed and got Error code 1, please help

Exit code 1 is a generic error from Minecraft. It is no different than “game didn’t load, no longer attempting to load. Please refer to the output error log created by your launcher” if you are unsure… please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our Discord. Try running ?logs instead.

I’m having issues connecting to a LAN/Essentials world

To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these.

\ No newline at end of file diff --git a/atm9/generatorgalore/index.html b/atm9/generatorgalore/index.html new file mode 100644 index 0000000..85c9980 --- /dev/null +++ b/atm9/generatorgalore/index.html @@ -0,0 +1,12 @@ + Generator Galore - All The Guides

Generator Galore

Power Gen Changes

Basic Generators
Generator Change
Copper 8 20 RF/t
Iron 16 40 RF/t
Gold 32 80 RF/t
Diamond 64 160 RF/t
Obsidian 128 200 RF/t
Emerald 256 300 RF/t
Netherite 256 500 RF/t
Special Generators
Generator Change Notes
Enchantment 40 500 RF/t
Magmatic 40 150 RF/t
Ender 40/80 300/500 RF/t Ender Pearl or Eye of Ender -> 300 500 RF/t.
Culinary 8 10 RF/t ATM Carrot currently generates 320 RF/t. This would make it 400 RF/t per carrot, which is fair.
Halitosis 40 1k RF/t Only way to automate Dragon’s Breath is HNN. Nerf overall RF given from 480k 200k .
NetherStar 4k 10k RF/t Tons of Nether Stars are needed for the star, so choosing this gen should be worth it.

Generator Galore | CurseForge

\ No newline at end of file diff --git a/atm9/gregtech/index.html b/atm9/gregtech/index.html new file mode 100644 index 0000000..f968dde --- /dev/null +++ b/atm9/gregtech/index.html @@ -0,0 +1,12 @@ + GregTech - All The Guides

GregTechCEu Modern

GregTechCEu Modern | CurseForge

\ No newline at end of file diff --git a/docs/atm9/img/allthemodium_chestplate.png b/atm9/img/allthemodium_chestplate.png similarity index 100% rename from docs/atm9/img/allthemodium_chestplate.png rename to atm9/img/allthemodium_chestplate.png diff --git a/docs/atm9/img/allthemodium_ingot.png b/atm9/img/allthemodium_ingot.png similarity index 100% rename from docs/atm9/img/allthemodium_ingot.png rename to atm9/img/allthemodium_ingot.png diff --git a/docs/atm9/img/allthemodium_ore.gif b/atm9/img/allthemodium_ore.gif similarity index 100% rename from docs/atm9/img/allthemodium_ore.gif rename to atm9/img/allthemodium_ore.gif diff --git a/docs/atm9/img/allthemodium_upgrade_smithing_template.png b/atm9/img/allthemodium_upgrade_smithing_template.png similarity index 100% rename from docs/atm9/img/allthemodium_upgrade_smithing_template.png rename to atm9/img/allthemodium_upgrade_smithing_template.png diff --git a/docs/atm9/img/apoth_charm.png b/atm9/img/apoth_charm.png similarity index 100% rename from docs/atm9/img/apoth_charm.png rename to atm9/img/apoth_charm.png diff --git a/docs/atm9/img/apoth_draconicInfusion.png b/atm9/img/apoth_draconicInfusion.png similarity index 100% rename from docs/atm9/img/apoth_draconicInfusion.png rename to atm9/img/apoth_draconicInfusion.png diff --git a/docs/atm9/img/apoth_draconicInfusionMax.png b/atm9/img/apoth_draconicInfusionMax.png similarity index 100% rename from docs/atm9/img/apoth_draconicInfusionMax.png rename to atm9/img/apoth_draconicInfusionMax.png diff --git a/docs/atm9/img/apoth_dragonsbreath.png b/atm9/img/apoth_dragonsbreath.png similarity index 100% rename from docs/atm9/img/apoth_dragonsbreath.png rename to atm9/img/apoth_dragonsbreath.png diff --git a/docs/atm9/img/apoth_enderInfusion.png b/atm9/img/apoth_enderInfusion.png similarity index 100% rename from docs/atm9/img/apoth_enderInfusion.png rename to atm9/img/apoth_enderInfusion.png diff --git a/docs/atm9/img/apoth_enderInfusionMax.png b/atm9/img/apoth_enderInfusionMax.png similarity index 100% rename from docs/atm9/img/apoth_enderInfusionMax.png rename to atm9/img/apoth_enderInfusionMax.png diff --git a/docs/atm9/img/apoth_extraction.png b/atm9/img/apoth_extraction.png similarity index 100% rename from docs/atm9/img/apoth_extraction.png rename to atm9/img/apoth_extraction.png diff --git a/docs/atm9/img/apoth_finalsetup.png b/atm9/img/apoth_finalsetup.png similarity index 100% rename from docs/atm9/img/apoth_finalsetup.png rename to atm9/img/apoth_finalsetup.png diff --git a/docs/atm9/img/apoth_library.png b/atm9/img/apoth_library.png similarity index 100% rename from docs/atm9/img/apoth_library.png rename to atm9/img/apoth_library.png diff --git a/docs/atm9/img/apoth_netherInfusion.png b/atm9/img/apoth_netherInfusion.png similarity index 100% rename from docs/atm9/img/apoth_netherInfusion.png rename to atm9/img/apoth_netherInfusion.png diff --git a/docs/atm9/img/apoth_netherInfusionMax.png b/atm9/img/apoth_netherInfusionMax.png similarity index 100% rename from docs/atm9/img/apoth_netherInfusionMax.png rename to atm9/img/apoth_netherInfusionMax.png diff --git a/docs/atm9/img/apoth_scrapping.png b/atm9/img/apoth_scrapping.png similarity index 100% rename from docs/atm9/img/apoth_scrapping.png rename to atm9/img/apoth_scrapping.png diff --git a/docs/atm9/img/apoth_seashelf1.png b/atm9/img/apoth_seashelf1.png similarity index 100% rename from docs/atm9/img/apoth_seashelf1.png rename to atm9/img/apoth_seashelf1.png diff --git a/docs/atm9/img/apoth_socketing.png b/atm9/img/apoth_socketing.png similarity index 100% rename from docs/atm9/img/apoth_socketing.png rename to atm9/img/apoth_socketing.png diff --git a/docs/atm9/img/atm9Logo.png b/atm9/img/atm9Logo.png similarity index 100% rename from docs/atm9/img/atm9Logo.png rename to atm9/img/atm9Logo.png diff --git a/docs/atm9/img/diamond_chestplate.png b/atm9/img/diamond_chestplate.png similarity index 100% rename from docs/atm9/img/diamond_chestplate.png rename to atm9/img/diamond_chestplate.png diff --git a/docs/atm9/img/enrichmentPatterns.png b/atm9/img/enrichmentPatterns.png similarity index 100% rename from docs/atm9/img/enrichmentPatterns.png rename to atm9/img/enrichmentPatterns.png diff --git a/docs/atm9/img/extreme_reactors_cc_kasrag.jpg b/atm9/img/extreme_reactors_cc_kasrag.jpg similarity index 100% rename from docs/atm9/img/extreme_reactors_cc_kasrag.jpg rename to atm9/img/extreme_reactors_cc_kasrag.jpg diff --git a/docs/atm9/img/infuserBuildStep1.png b/atm9/img/infuserBuildStep1.png similarity index 100% rename from docs/atm9/img/infuserBuildStep1.png rename to atm9/img/infuserBuildStep1.png diff --git a/docs/atm9/img/infuserBuildsStep2.1.png b/atm9/img/infuserBuildsStep2.1.png similarity index 100% rename from docs/atm9/img/infuserBuildsStep2.1.png rename to atm9/img/infuserBuildsStep2.1.png diff --git a/docs/atm9/img/infuserBuildsStep2.png b/atm9/img/infuserBuildsStep2.png similarity index 100% rename from docs/atm9/img/infuserBuildsStep2.png rename to atm9/img/infuserBuildsStep2.png diff --git a/docs/atm9/img/infuserEnrichIO.png b/atm9/img/infuserEnrichIO.png similarity index 100% rename from docs/atm9/img/infuserEnrichIO.png rename to atm9/img/infuserEnrichIO.png diff --git a/docs/atm9/img/infuserOverview.png b/atm9/img/infuserOverview.png similarity index 100% rename from docs/atm9/img/infuserOverview.png rename to atm9/img/infuserOverview.png diff --git a/docs/atm9/img/infuserPatternProvider.png b/atm9/img/infuserPatternProvider.png similarity index 100% rename from docs/atm9/img/infuserPatternProvider.png rename to atm9/img/infuserPatternProvider.png diff --git a/docs/atm9/img/infuserPatterns.png b/atm9/img/infuserPatterns.png similarity index 100% rename from docs/atm9/img/infuserPatterns.png rename to atm9/img/infuserPatterns.png diff --git a/docs/atm9/img/infuserStorageBusConfig.png b/atm9/img/infuserStorageBusConfig.png similarity index 100% rename from docs/atm9/img/infuserStorageBusConfig.png rename to atm9/img/infuserStorageBusConfig.png diff --git a/docs/atm9/img/netherite_chestplate.png b/atm9/img/netherite_chestplate.png similarity index 100% rename from docs/atm9/img/netherite_chestplate.png rename to atm9/img/netherite_chestplate.png diff --git a/docs/atm9/img/netherite_ingot.png b/atm9/img/netherite_ingot.png similarity index 100% rename from docs/atm9/img/netherite_ingot.png rename to atm9/img/netherite_ingot.png diff --git a/docs/atm9/img/netherite_upgrade_smithing_template.png b/atm9/img/netherite_upgrade_smithing_template.png similarity index 100% rename from docs/atm9/img/netherite_upgrade_smithing_template.png rename to atm9/img/netherite_upgrade_smithing_template.png diff --git a/docs/atm9/img/pb_behavior.png b/atm9/img/pb_behavior.png similarity index 100% rename from docs/atm9/img/pb_behavior.png rename to atm9/img/pb_behavior.png diff --git a/docs/atm9/img/pb_breedingpair.png b/atm9/img/pb_breedingpair.png similarity index 100% rename from docs/atm9/img/pb_breedingpair.png rename to atm9/img/pb_breedingpair.png diff --git a/docs/atm9/img/pb_geneautomation.png b/atm9/img/pb_geneautomation.png similarity index 100% rename from docs/atm9/img/pb_geneautomation.png rename to atm9/img/pb_geneautomation.png diff --git a/docs/atm9/img/pb_genes.png b/atm9/img/pb_genes.png similarity index 100% rename from docs/atm9/img/pb_genes.png rename to atm9/img/pb_genes.png diff --git a/docs/atm9/img/pb_howtogetgenes.jpeg b/atm9/img/pb_howtogetgenes.jpeg similarity index 100% rename from docs/atm9/img/pb_howtogetgenes.jpeg rename to atm9/img/pb_howtogetgenes.jpeg diff --git a/docs/atm9/img/pb_kamikaze.png b/atm9/img/pb_kamikaze.png similarity index 100% rename from docs/atm9/img/pb_kamikaze.png rename to atm9/img/pb_kamikaze.png diff --git a/docs/atm9/img/pb_waterbee.png b/atm9/img/pb_waterbee.png similarity index 100% rename from docs/atm9/img/pb_waterbee.png rename to atm9/img/pb_waterbee.png diff --git a/docs/atm9/img/phytoae2_1.png b/atm9/img/phytoae2_1.png similarity index 100% rename from docs/atm9/img/phytoae2_1.png rename to atm9/img/phytoae2_1.png diff --git a/docs/atm9/img/phytoae2_cardandfilter.png b/atm9/img/phytoae2_cardandfilter.png similarity index 100% rename from docs/atm9/img/phytoae2_cardandfilter.png rename to atm9/img/phytoae2_cardandfilter.png diff --git a/docs/atm9/img/phytoae2_densecables.png b/atm9/img/phytoae2_densecables.png similarity index 100% rename from docs/atm9/img/phytoae2_densecables.png rename to atm9/img/phytoae2_densecables.png diff --git a/docs/atm9/img/phytoae2_energy.png b/atm9/img/phytoae2_energy.png similarity index 100% rename from docs/atm9/img/phytoae2_energy.png rename to atm9/img/phytoae2_energy.png diff --git a/docs/atm9/img/phytoae2_module.png b/atm9/img/phytoae2_module.png similarity index 100% rename from docs/atm9/img/phytoae2_module.png rename to atm9/img/phytoae2_module.png diff --git a/docs/atm9/img/phytoae2_modulecorner.png b/atm9/img/phytoae2_modulecorner.png similarity index 100% rename from docs/atm9/img/phytoae2_modulecorner.png rename to atm9/img/phytoae2_modulecorner.png diff --git a/docs/atm9/img/phytoae2_phytoaugs.png b/atm9/img/phytoae2_phytoaugs.png similarity index 100% rename from docs/atm9/img/phytoae2_phytoaugs.png rename to atm9/img/phytoae2_phytoaugs.png diff --git a/docs/atm9/img/phytoae2_phytosettings.png b/atm9/img/phytoae2_phytosettings.png similarity index 100% rename from docs/atm9/img/phytoae2_phytosettings.png rename to atm9/img/phytoae2_phytosettings.png diff --git a/docs/atm9/img/phytoae2brain_1.png b/atm9/img/phytoae2brain_1.png similarity index 100% rename from docs/atm9/img/phytoae2brain_1.png rename to atm9/img/phytoae2brain_1.png diff --git a/docs/atm9/img/phytoae2brain_2.png b/atm9/img/phytoae2brain_2.png similarity index 100% rename from docs/atm9/img/phytoae2brain_2.png rename to atm9/img/phytoae2brain_2.png diff --git a/docs/atm9/img/phytoae2brain_interfacesettings.png b/atm9/img/phytoae2brain_interfacesettings.png similarity index 100% rename from docs/atm9/img/phytoae2brain_interfacesettings.png rename to atm9/img/phytoae2brain_interfacesettings.png diff --git a/docs/atm9/img/phytoae2brain_sinkbus.png b/atm9/img/phytoae2brain_sinkbus.png similarity index 100% rename from docs/atm9/img/phytoae2brain_sinkbus.png rename to atm9/img/phytoae2brain_sinkbus.png diff --git a/docs/atm9/img/unobtainium_chestplate.png b/atm9/img/unobtainium_chestplate.png similarity index 100% rename from docs/atm9/img/unobtainium_chestplate.png rename to atm9/img/unobtainium_chestplate.png diff --git a/docs/atm9/img/unobtainium_ingot.png b/atm9/img/unobtainium_ingot.png similarity index 100% rename from docs/atm9/img/unobtainium_ingot.png rename to atm9/img/unobtainium_ingot.png diff --git a/docs/atm9/img/unobtainium_ore.gif b/atm9/img/unobtainium_ore.gif similarity index 100% rename from docs/atm9/img/unobtainium_ore.gif rename to atm9/img/unobtainium_ore.gif diff --git a/docs/atm9/img/unobtainium_upgrade_smithing_template.png b/atm9/img/unobtainium_upgrade_smithing_template.png similarity index 100% rename from docs/atm9/img/unobtainium_upgrade_smithing_template.png rename to atm9/img/unobtainium_upgrade_smithing_template.png diff --git a/docs/atm9/img/vibranium_chestplate.png b/atm9/img/vibranium_chestplate.png similarity index 100% rename from docs/atm9/img/vibranium_chestplate.png rename to atm9/img/vibranium_chestplate.png diff --git a/docs/atm9/img/vibranium_ingot.png b/atm9/img/vibranium_ingot.png similarity index 100% rename from docs/atm9/img/vibranium_ingot.png rename to atm9/img/vibranium_ingot.png diff --git a/docs/atm9/img/vibranium_ore.gif b/atm9/img/vibranium_ore.gif similarity index 100% rename from docs/atm9/img/vibranium_ore.gif rename to atm9/img/vibranium_ore.gif diff --git a/docs/atm9/img/vibranium_upgrade_smithing_template.png b/atm9/img/vibranium_upgrade_smithing_template.png similarity index 100% rename from docs/atm9/img/vibranium_upgrade_smithing_template.png rename to atm9/img/vibranium_upgrade_smithing_template.png diff --git a/atm9/index.html b/atm9/index.html new file mode 100644 index 0000000..7c85e8e --- /dev/null +++ b/atm9/index.html @@ -0,0 +1,12 @@ + All The Mods 9 - All The Guides

All The Mods 9

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 9 we will continue the tradition adding many new mods while going for more stability.

Does “All the Mods” really contain ALL THE MODS? No, of course not.

We use a few versions of Complementary Shaders and if there are any issues with them that all falls on us for using them in our pack. If you want to learn more about them please check them out on their website.

All The Mods 9 | CurseForge | GitHub

\ No newline at end of file diff --git a/atm9/mahoutsukai/index.html b/atm9/mahoutsukai/index.html new file mode 100644 index 0000000..d79820a --- /dev/null +++ b/atm9/mahoutsukai/index.html @@ -0,0 +1,12 @@ + Mahou Tsukai - All The Guides

Mahou Tsukai

Mahou Tsukai is a magic mod focused mainly on spell uniqueness and special effects, instead of focusing on how spells are created, as many magic mods do. Many of the spells are based on similar concepts in Fate/Stay Night and other media, but knowledge of these media are not at all necessary to understand and enjoy the mod.

ATM9 Mahou Changes

  • Innate Cap is set to a maximum of 5000.
  • Increasing Innate Cap requires throwing Ender Upgrade Orbs (26 max) in Mahou lake along with Caliburn in a single throw.
  • Converting Caliburn to Morgan requires killing the Warden with Caliburn.

You must throw Caliburn into the lake with all Ender Upgrade Orbs you plan to use at the same time in a single throw. You only have one chance to increase the Innate Cap. If for example you only throw 10 Ender Upgrade Orbs and Caliburn into the lake, then later throw 16 (for a total of 26) in the lake with Caliburn it will not accept the remaining 16 Ender Upgrade Orbs. If this happens you need to make a new Caliburn.

Mahou Tsukai | CurseForge

\ No newline at end of file diff --git a/atm9/mekanism/index.html b/atm9/mekanism/index.html new file mode 100644 index 0000000..49434e1 --- /dev/null +++ b/atm9/mekanism/index.html @@ -0,0 +1,12 @@ + Mekanism - All The Guides

Mekanism

Power Gen Changes

Buffed

Generator Change Notes
Bio Generator 280 500 RF/t Makes it more of an option instead of straight out using GBG.

Nerfed

Generator Change Notes
GBG Ethylene 78K ~8.5k RF/t Super nerfed but promotes good setups.

Higher burn rate = more melons needed for setup.

Recipe has been made harder for the GBG.


AE2 Mekanism Infuser Auto-Crafting

Using ME Pattern Providers, we can fully automate the Metallurgic Infuser and Enrichment Chamber. This setup will only use 2 channels of your main network.

Materials
  • 1x Metalluric Infuser (higher the level, the better)
  • 1x Enrichment Chamber (higher, the better)
  • 1x Quartz Fiber
  • 8x AE2 Cables
  • 2x ME Pattern Provider (Block form)
  • 1x ME Interface (Panel form)
  • 2x ME Storage Bus
  • 8x Blank Patterns
Do you have Refined Obsidian automated already?

You can skip the Obsidian Dust filter on the left storage bus and the Refined Obsidian Dust Pattern and instead make a processing pattern to turn Refined Obsidian Ingots into Refined Obsidian Dust and put that in a Pattern Provider connected to a Crusher.


Building and Configuring

  1. Put down your Metallurgic Infuser and place an ME Storage Bus on both sides of the infuser.
  2. Place an ME Pattern Provider right behind the infuser and put an ME Interface on top, then place a Quartz Fiber on the side.
  3. Place 7 AE2 cables (Yellow in the example) connecting all AE2 devices. The orange cable connects to your main AE2 network.

  1. Adjacent to the Infuser, place an Enrichment Chamber and a Pattern Provider behind it and place a cable connecting both pattern providers.

If you’re using the same colored cables, place a Cable Anchor between them or use a different color.


  1. Set the Infuser & Enrichment inputs/outputs like the images below.

The Infuser will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the Enrichment Chamber will input/output the back (Purple).

  1. For the ME Storage Buses item filters have Iron, Infused Alloy, Enriched Alloy, and Obsidian Dust on the left side and Enriched Redstone, Diamond, and Obsidian on the right.

Processing Patterns

Now, we’ll encode the Processing Patterns. These patterns are made so there will be a (essentially) 0% chance of clogging the Infuser due to leftover materials.

Make sure to set the patterns to Process (Furnace icon) instead of Crafting (Crafting Table icon).

  • 8 Iron + 1 Enriched Redstone = 8 Infused Alloy
  • 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy
  • 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy
  • 1 Obsidian = 4 Obsidian Dust
  • 1 Redstone = 1 Enriched Redstone
  • 1 Diamond = 1 Enriched Diamond
  • 1 Refined Obsidian Dust = 1 Enriched Obsidian
  • 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust

Then you’ll put patterns in each pattern provider as shown below.

Make sure to give both machines power and to enabled Auto-Split.


Fission Reactor Temp Calculation

Big shoutout to Kayla for these equations! Go check out her CC Mek SCADA on GitHub!

Use the equation below to estimate how hot your reactor will get at a specific burn rate for either water or sodium coolant. Remember the reactor starts taking damage at >1200K!

Water: burn_rate(1) * 2 * [1,000,000 * (heat_capacity-1)] + 373.15

  1. in mB

Sodium: burn_rate(1) * [1,000,000 * (heat_capacity-1)] + 373.15

  1. in mB
How do I calculate heat_capacity?

heat_capacity is joules per kelvin based on the physical size of the reactor, by default thats 1000x the amount of ‘casing’ which includes reactor glass, casing, valves, etc.

- Kayla

heat_capacity = (2 * W2) + [(H-2) * (W2 -(W-2)2)] * 1000

W and H are the Width and Height of Fission Reactor respectively

Full Explanation of Kayla’s Calculations


Mekanism | CurseForge

\ No newline at end of file diff --git a/atm9/mobgrindingutils/index.html b/atm9/mobgrindingutils/index.html new file mode 100644 index 0000000..f321d37 --- /dev/null +++ b/atm9/mobgrindingutils/index.html @@ -0,0 +1,12 @@ + Mob Grinding Utils - All The Guides

Mob Grinding Utils

Recipe Changes

The Looting upgrade for the Mob Masher has been changed. Originally, it required redstone dust, 4 blue dye, and 4 gold nuggets.

It is mostly the same, but instead of redstone dust it now uses an actual Enchanted Book with Looting (any level).

Mob Grinding Utils | CurseForge

\ No newline at end of file diff --git a/atm9/mysticalagriculture/index.html b/atm9/mysticalagriculture/index.html new file mode 100644 index 0000000..23ec1e4 --- /dev/null +++ b/atm9/mysticalagriculture/index.html @@ -0,0 +1,12 @@ + Mystical Agriculture - All The Guides

Mystical Agriculture

Infusion Changes

ATM9 adds Mystical Agriculture Tiered Crystals which, as the name suggests, adds tiered crystals. You must use a crystal of the same tier to upgrade to the next one (EX: You have to use an Imperium Crystal to craft Supremium Essence).

  • Master Infusion Crystals now requires 4 SupremiumInsanium.

Farm Designs

AlfredGG’s Farm

My Watering Can/Scythe isn’t working

Mystical Agriculture doesn’t allow fake players by default. The config can be changed in config/mysticalagriculture-common.toml -> fakePlayerWatering = true.

My Modular Routers aren’t working

You will need to add a Security Upgrade since you are working in a claimed chunk (even though it’s yours)

KJM’s Full-Auto Phytogenic Insolator with AE2

Full setup using all 32 channels of a dense cable per wall

Requirements

Minimum Building Materials
  • These materials set the ground work to build the full thing.
  • 3x ME Interface
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 2x AE2 Crafting Card
  • 2x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 8x of another different colored Dense cable (Examples are using Orange dense cables)
All Building Materials
  • 129x ME Interfaces
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 128x AE2 Crafting Card
  • 256x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 68x of another different colored Dense cable (Examples are using Orange dense cables)

Each image has a caption that shows when you click on it that you can read if you are stuck.

This farm requires a general understanding of AE2 and Thermal Series

Click here to view Kai’s AE2 guide!

The “Brain”

First I’ll show you how to build the “brain” of those whole system. You can place it above everything (like in the image above) or underneath the floor.

  1. Place a Sink/Eternal Water Block and an ME Interface on the corners of a Quantum Ring and then place 2x Quartz Fibers/Cable Anchors between the Sink and ME Interface and on the center of the Quantum Ring.
  2. Then place your 2x colored cables (Lime cables) on top of them along with an ME Controller.
  3. The 1x colored cable (Magenta cable) should connect the quantum ring and the ME Interface.
  • Make sure to link your Quantum Rings.

Make sure to put quartz fiber or cable anchors to isolate the Lime cable from your home AE2 system

  1. Place 2x ME Storage Bus on the ME Interface and Sink, facing each other.

ME Storage Bus on both the Sink and ME Interface

  1. Have the ME Interface stock Water and Phyto-Gro and set the priority to -1. ME Interface settings

  2. For the ME Storage Bus on the Sink settings, have the Input/Output Mode to Extract Only and put Water in the filter by dragging it from JEI. Storage Bus on sink settings


The Modules

Now we’ll build one of the “modules” that make up the entire thing. Each column of Phyto/Interface pairs is 8 blocks tall since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable.

  1. Each module consists of 2 Phytos next to each other and an ME Interface on each side.

1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90° to one side depending on which corner it’s on.

  1. For the ME Interface, put a Crafting Card in and set Water and Phyto-Gro in the filter by dragging it from JEI.

  2. For the Phytos it’ll be slightly different depending on which side the ME Interface is on. You will have it Auto Input/Output the side touching the interface. The image below is for a phyto with an interface to the left.

  3. Each Phyto will have 1x Draconic Integral Component & 3x Twinite Flux Linkages. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these.

Why not use Shellite instead of Twinite? KJM explains

The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component.

You’ll stack these modules to a maximum of 8 tall and arrange them into 4 walls.

Tips
  • Use an AE2 Memory Card to copy ME Interface settings (Shift + R-Click to Copy, R-Click to Paste)
  • Use Redprint to copy Phytogenic Insolator settings (R-Click to Copy and to Paste)

Connecting and Powering

You’ll put your Colored Dense Cables in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos.

Mystical Agriculture | CurseForge

\ No newline at end of file diff --git a/atm9/powah/index.html b/atm9/powah/index.html new file mode 100644 index 0000000..f5a89bb --- /dev/null +++ b/atm9/powah/index.html @@ -0,0 +1,12 @@ + Powah - All The Guides

Powah!

Powah is a tech mod that adds various ways to generate, store, and transmit FE (Forge Energy).

Power Gen Changes

  • Soul Lava can now be used in the Thermo. This doesn’t increase RF/t, but generates 9x more RF per mb.
  • Early game generators have been given a buff to make it feel better to start in Powah vs other mods. The changes are as followed:

Furnator

  • Starter: 20 80 RF/t
  • Basic: 80 160 RF/t
  • Hardened: 200 400 RF/t
  • Blazing: 800 1000 RF/t

Magmator

  • Starter: 20 80 RF/t
  • Basic: 80 160 RF/t
  • Hardened: 200 400 RF/t
  • Blazing: 800 1000 RF/t

Thermo Generator

  • Starter: 20 40 RF/t
  • Basic: 60 80 RF/t
  • Hardened: 125 150 RF/t
  • Blazing: 250 300 RF/t
  • Niotic: 500 600 RF/t
  • Spirited: 1250 1500 RF/t
  • Nitro: 2750 3500 RF/t
Note

While these are small buffs, using Soul Lava gets a massive buff here. Nitro tier goes from ~25k RF/t to ~31.5k RF/t.

Solar Generators

  • Starter: 20 40 RF/t
  • Basic: 60 120 RF/t
  • Hardened: 180 400 RF/t
  • Blazing: 540 1500 RF/t
  • Niotic: 1620 5000 RF/t
  • Spirited: 5000 16000 RF/t
  • Nitro: 20000 50000 RF/t
Note

While it may seem like a massive buff, Solar Panels are more expensive than almost every other generator, including Reactors. Each tier requires 3 of the previous tier, so this should make them more of an enticing option for late game players.

Powah! | CurseForge

\ No newline at end of file diff --git a/atm9/productivebees/index.html b/atm9/productivebees/index.html new file mode 100644 index 0000000..599cb7e --- /dev/null +++ b/atm9/productivebees/index.html @@ -0,0 +1,12 @@ + Productive Bees - All The Guides

Productive Bees

Kaimonick’s Bee Guides

Click here to view Kai’s bee guide!

Jonh09’s Bee Guide

Hi, I’m Jonh09 and this guide is to help people who are getting into Productive Bees or want to know more advanced stuff.

If you’re starting out and want to learn more, check out Kai’s Guides for complete set of guides. Pilpoh also has an advanced guide! Also, read the Productive Bees book; it has all you need to know, including upgrades and how they work, different types of bees, different machines, etc. A glance at the book will help if you get stuck. Also, remember that JEI is your best friend.

This guide’s main focus is genes. Genes are the stats that bees have that determine their productivity, what conditions they can work in, and other less important ones. I will show you the best genes and how to get them here.

If you find any errors or something that can be done differently, you can ping me @jonh09.

Original guide: Productive Bees GUIDE - Beginning Tutorials + Best Genes and how to get them


Gene Types

A bee's genes

Apart from the 5 main genes, there is a 6th gene, the bee-specific gene. These are used to make spawn eggs of that bee. Most major mods use bee spawn eggs to connect themselves to Productive Bees. (EX: Mystical Agriculture essence bees)


Gene Description Levels Best Level
Productivity Produces more combs per trip Normal, Medium, High, Very High Very High
Weather Tolerance Determines which weather conditions a bee can work in None, Rain, Any Any
Behavior What time of day the bee can work Diurnal, Nocturnal, Metaturnal Metaturnal
Endurance Affects the bee’s max health Weak, Normal, Medium, Strong Strong
Temper Affects bee’s hostility Passive, Normal, Aggressive, Hostile Passive

How to Get Genes

Now that you know what the genes are, you need to know how to get the genes. When you squash a bee to get genes, you will get all of its 6 different genes. The bad news? You only get a small percentage of the gene. The percentage dictates the chance that another bee has to get that gene. To give genes to a different bee, combine a Honey Treat with your chosen gene(s) in a crafting grid and then Right Button on a bee to give them that trait.

Bee squashing diagram

Getting genes is a pretty simple process:
  1. Get a bee you wish to get the genes of
  2. In a 3 block tall space, put a Bottler (with bottles of course) on the bottom, and a Piston facing down on top with button/lever next to it.
  3. Put the bee in the middle, and quickly press the lever/button, that will squish the bee into a bottler and give you Squashed Bee Material
  4. Put that into a Centrifuge, and it will give you the 6 genes of the bee.

Easy right? But remember, it will only give up to around 20% of the gene per bee, so you need to repeat the process 4-5 times. I’ll show you how to get genes automatically below.


Gene Automation

This is a simple semi-automated setup. I reckon you already know how to set up breeding and incubation to get more bees if you are here.

Example gene automation setup

1. The Dispensing of Bees

For this you can just use a vanilla Dispenser + an RFTools Timer to send a pulse to it every 20 ticks, releasing a bee from a cage into the piston area. The lever behind the Timer is just to disable it when you arent using it.

Tip

Make sure you are squishing bees in disposable cages, as those dont cause any clutter and are more straightforward to use

2. The Squishing

This is where the bees will be turned into the Squashed Bee Material, the same thing as in the previous explanation. Dont forget to send bottles to the Bottler or it will stop squishing bees.

Tip

If you keep the piston extended, like in the image, the bees will get squashed automatically when you push/dispense them into it.

3. Processing Bee Material

Using any Item Collector, pick up the Squashed Bee Material and send it to a Centrifuge that separates it into the 6 genes.

4. Sorting & Improving Genes.

After getting the genes out of the centrifuge using whatever pipe you prefer, you can send them into a Gene Indexer. This machine will sort and combine the genes inside when given a redstone signal (Lever or Redstone Block). It will combine all the genes into their 100% version. These are the ones we are looking for, the ones that allow you to change the genes of a bee 100% of the time.

Optional Step

Using an item pipe from Pipez that can pull 100% genes with NBT filtering.

Item: productivebees:gene

NBT: {productivebees_gene_purity:100}


Getting the Best Genes

OK, OK, you already know what genes are, how to get them, and how to automate them. This is what you are here for, the BEST genes. In this section, I’ll discuss the most and least important ones.

Note

My recommendation? Put all your good genes into one bee that you can breed. Then, you will get a baby with the same genes.

From there, breed them -> Squish them -> Get genes -> Make Honey Treats with those genes, and use those to upgrade all your bees.

Tip

You can put multiple genes into the same Honey Treat. I like to call this Bee Steroids, a honey treat with all the best genes.

Least Important

The least important ones are Temper and Endurance. These two are worthless if you use a Simulation Upgrade or have them in a box.

Most Important

Productivity: Very High

This one’s the trickiest and most important; this trait can only be gotten from Kamikaze Bees.

Kamikaze Bees spawn in a particular way by being attacked. Their only objective is to protect you by… well… going kamikaze on the attacker.

While wearing a Bee Nest Helmet (a Diamond helmet with a Nest on top), if you get hit by a hostile mob, there is a 30% chance of a Kamikaze Bee spawning. The difficult part? They’re TINY and FAST so you need to have a setup inside an enclosed box, have a Catcher ready, or have good aim and cage them once they spawn.

Get 4-5 of them then squeeze them. This should get you a 100% Very High Productivity gene.

Kamikaze Bees can’t breed with each other.

Now, you need to put the gene in an easy-to-breed bee (via Honey Treat + Gene) and breed them, and once an offspring is born with the Very High gene use it to breed more bees of that type. With that, you basically have infinite, Very High Productivity genes.

Behavior: Metaturnal

To get this trait, a bee needs to be left outside for a few days. If it starts as Diurnal, it will change to Nocturnal, then Metaturnal. If you have Nocturnal bees, that’s better since you are already halfway there.

I recommend using a Lead + a Fence to secure them so they don’t fly away.

You must feed them Honey Treats once in a while because they take damage while they’re stuck outside

Weather Tolerance: Any

There are 2 ways to obtain this. The slow and the fast way.

The slow: The strategy of leaving the bees outside so they get forced to adapt like the previous one… OR the fast fishing route.

By fishing I mean fishing for bees, more specifically Water Bees. To get them, you will need to fish in a River biome.

If there aren’t rivers nearby, use a Nature’s Compass to point you to a river.

While using a normal fishing rod, there is a chance for a Water Bee to come out of the water, and it will be MAD, so have a Cage on hand to capture it. You will need 2 of those to breed them to make more and to get that sweet weather tolerance.

Genes When Breeding

When breeding, you must know how genes are assigned to a child bee.

The bee on the Left side will be the Main bee, which is the one with priority gene-wise. This means that the baby will have the genes of the main bee at a minimum.

The bee on the Right only defines the range of gene levels.

In the image below the “maxed” gene levels of the Main bee (Weather tolerance, behavior, and endurance) gets transferred to the child bee.

Example

If the main bee has Productivity: Medium, and the 2nd bee has Productivity: Very High, the baby will have a chance to have either Medium (the minimum the main bee has), High, or Very High.

You will never get a child bee that has genes of a lower level than the main bee. That’s why I recommend maxing out the 1st bee so it can be used as the main one for breeding.

Productive Bees | CurseForge

\ No newline at end of file diff --git a/atm9tts/faq/index.html b/atm9tts/faq/index.html new file mode 100644 index 0000000..379b6a9 --- /dev/null +++ b/atm9tts/faq/index.html @@ -0,0 +1,12 @@ + ATM9TTS FAQ - All The Guides

FAQ

All The Mods 9 - To The Sky Frequently Asked Questions


Gameplay FAQs
How do I get pebbles? Right clicking dirt doesn’t do anything!

You need to shift-right click dirt to get pebbles.

How do I get more dirt?
  • You can put any organic matter (leaves, seeds, saplings, etc.) in the same barrels you use to get witch water.
  • or Hammer some logs and put the chips in the barrel
Is ‘item/block name’ EMC-able?

Do EMC: in JEI and it’ll list all items that have an EMC value.

I’m not getting any silkworms!

If you’re doing it the right way with a crook, then you might just have really bad RNG. Keep trying.

Technical FAQs
Why isn’t ‘insert name’ mod in ATM9-TTS yet?

ATM packs does not literally contain “All The Mods”. Our main focus is having mods that’s not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version 1.20.1, and Forge (Not NeoForge), you may make a suggestion.

I found a bug/dupe in the pack. How can I report it?

To report bugs, dupes or similar, head over to the ATM9-TTS GitHub and open a new issue describing the occurrence.

I can’t complete ‘name of quest’ even though I fufilled the requirements?

You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it’s progress if you still have the items.

What are the recommended Java arguments for this pack?
  • Client arguments: send ?args in the #bot-spam channel in our Discord.
  • Server arguments: send ?svargs in the #bot=spam channel in our Discord.
Why does my game crash while launching?

Lack of RAM most likely. Send ?allocate in the #bot-spam channel in our Discord to learn how to allocate more RAM. If that’s not the problem, head to #atm9-techsupport and send ?logs to see how to upload your crash/latest log.

I crashed and got Error code 1, please help

Exit code 1 is a generic error from Minecraft. It is no different than “game didn’t load, no longer attempting to load. Please refer to the output error log created by your launcher” if you are unsure… please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our Discord. Try running ?logs instead.

I’m having issues connecting to a LAN/Essentials world

To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these.

\ No newline at end of file diff --git a/docs/atm9tts/img/atm9TTSLogo.png b/atm9tts/img/atm9TTSLogo.png similarity index 100% rename from docs/atm9tts/img/atm9TTSLogo.png rename to atm9tts/img/atm9TTSLogo.png diff --git a/atm9tts/index.html b/atm9tts/index.html new file mode 100644 index 0000000..e972dfa --- /dev/null +++ b/atm9tts/index.html @@ -0,0 +1,12 @@ + All The Mods 9 - To The Sky - All The Guides

All The Mods 9

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

All the Mods 9: To the Sky is the cap off to the trilogy of sky packs for All The Mods. The team have taken feedback from the first 2 iterations to make this pack the best we have to offer. This pack adds mods that were not in the others such as Forcecraft, Forgiving Void, Oreberries, and Utilitarian. We’re hoping to make this the most open ended ATM pack yet!

This skyblock pack features Ex Machinis: Divitiae Deorum, an automation addon for Ex Deorum built in house by ATM to take you from early game all the way to end game automated resources

Does “All the Mods” really contain ALL THE MODS? No, of course not.

All The Mods 9 - To The Sky | CurseForge | GitHub

\ No newline at end of file diff --git a/atmg/gravitas2/index.html b/atmg/gravitas2/index.html new file mode 100644 index 0000000..bfee399 --- /dev/null +++ b/atmg/gravitas2/index.html @@ -0,0 +1,12 @@ + All The Mods - Gravitas² - All The Guides

All The Mods - Gravitas²

Per aspera ad astra - Through hardships to the stars.

Starting from primitive stone age technology, hand-knapping your tools, foraging for food, you will progress through the ages covering many classic and new mods to complement the TerraFirmaCraft experience.Create New Age, Thorium Reactors, Integrated Dynamics, Applied Energistics, Stargate Journey Ice & Fire and perhaps the most anticipated addition, GregTech. You will voyage from a primitive beginning, smashing rocks together, to smashing atoms together, to power your voyages to the stars and beyond!

Gravitas² | CurseForge | Github

\ No newline at end of file diff --git a/atmg/index.html b/atmg/index.html new file mode 100644 index 0000000..0828028 --- /dev/null +++ b/atmg/index.html @@ -0,0 +1,12 @@ + Gravitas - All The Guides

All The Mods - Gravitas

Per aspera ad astra - Through hardships to the stars.

From your early beginnings in this pack, you will be faced with a far different experience than the typical modpack provides. This modpack includes Terrafirmacraft(TFC), which completely overhauls the base Minecraft mechanics, adds dynamic environments with landslides, cave ins and the concept of support beams add an element of danger to mining that extends beyond the monsters you will find underground. An immersive survival experience with detailed world generation with flowing rivers that have an active current, and flow towards oceans, fresh and salt water, Food has an expiration date, and eating it past its date has dire consequences to your health. This pack takes you on a voyage from picking up sticks to craft your first tools, to piloting a rocket to the stars, Can you claw your way to Glacio to locate the stronghold, and face the Ender Dragon?

All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other “big name” packs include but with a nice mix of some of newer or lesser-known mods as well.

Does “All the Mods” really contain ALL THE MODS? No, of course not. Especially not this pack.

All The Mods - Gravitas | CurseForge | GitHub

\ No newline at end of file diff --git a/atms/index.html b/atms/index.html new file mode 100644 index 0000000..6fe0b2d --- /dev/null +++ b/atms/index.html @@ -0,0 +1,12 @@ + All The Magic - Spellbound - All The Guides

All The Magic: Spellbound

You have conquered all the mods, but can you conquer all the magic? With no tech to hold your hand see the world through different eyes as you rely on what the mystic arts has to offer, With a complete rewrite to the ATM star’s recipe and each mod intertwined, explore the depths of mods such as blood magic and botania to fulfil your needs for storage, flight, and to protect yourself as you explore the dimensions on offer.

All The Mods Magic: Spellbound | CurseForge | GitHub

\ No newline at end of file diff --git a/atmvb/index.html b/atmvb/index.html new file mode 100644 index 0000000..5b0062f --- /dev/null +++ b/atmvb/index.html @@ -0,0 +1,12 @@ + All The Mods - Volcano Block - All The Guides

All The Mods - Volcano Block

All the mods volcano block is a modpack is both a reimagination of the 1.12 Volcanoblock and also the third sieve based modpack following on from 6 and 7 To the Sky.

Multiple resource paths

Sieving isn’t for everyone, this is a known problem with skyblock packs so we like to open you up to different resource generation types the further you get into the modpack, from Ex Machinis, our built in-house automation mod for ex nihilo, to Mystical Agriculture and Resource Chickens, and even void miners from Occultism and Industrial Foregoing you will never be strapped for diamonds, nor be forced towards one path.

In All the Mods VolcanoBlock we will continue the tradition adding new mods and removing others to change up the feel, whilst keeping to the quality of the To the Sky series

Does “All The Mods” really contain ALL THE MODS? No, of course not.

All The Mods - Volcano Block | CurseForge | GitHub

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..fc769b9 --- /dev/null +++ b/blog/index.html @@ -0,0 +1,12 @@ + Blog - All The Guides

Blog

\ No newline at end of file diff --git a/blog/posts/new/index.html b/blog/posts/new/index.html new file mode 100644 index 0000000..9d88ab5 --- /dev/null +++ b/blog/posts/new/index.html @@ -0,0 +1,12 @@ + Example Blog Post - All The Guides

Example

This is an example post.

\ No newline at end of file diff --git a/css/timeago.css b/css/timeago.css new file mode 100644 index 0000000..f7ab7d6 --- /dev/null +++ b/css/timeago.css @@ -0,0 +1,15 @@ +/* + timeago output is dynamic, which breaks when you print a page. + + This CSS is only included when type: timeago + and ensures fallback to type "iso_date" when printing. + + */ + +.git-revision-date-localized-plugin-iso_date { display: none } + +@media print { + .git-revision-date-localized-plugin-iso_date { display: inline } + .git-revision-date-localized-plugin-timeago { display: none } +} + diff --git a/docs/.pages b/docs/.pages deleted file mode 100644 index 511fd1c..0000000 --- a/docs/.pages +++ /dev/null @@ -1,17 +0,0 @@ -nav: -# - Blogs: /atg/blog - - Pack Guides: - - Home: README.md - - All The Mods 9: atm9 - - All The Mods 9 - TTS: atm9tts - - All The Mods - Volcano Block: atmvb - - All The Mods - Gravitas: atmg - - All The Mods 8: atm8 - - All The Mods 7: atm7 - - All The Spells - Spellbound: atms - - All The Mods 6: atm6 - - Legacy Packs: legacy -# - Misc: misc - - Additional Guides : guides - - Help: help - - About: about \ No newline at end of file diff --git a/docs/404.md b/docs/404.md deleted file mode 100644 index ca2a6a4..0000000 --- a/docs/404.md +++ /dev/null @@ -1,7 +0,0 @@ -# 404 - -!!! Error "Page Not Found" - - The resource you're visiting may or may not have ever existed. - -![](assets/images/404.png){style='margin: auto; display: flex' class='noselect'} diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 539b3b5..0000000 --- a/docs/README.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Welcome -description: All The Guides For All The Mods Mod Packs! ---- - -# Welcome! - -To the new **All The Guides**, by **All The Mods** (_ATM_). - -This guide is currently a work in progress, so there will be missing/placeholder information. Want to contribute? Check [About All The Guides Contributing](guides/contributing/README.md) - -???+ Tip "All The Guides is only for our packs" - ATM has custom changes and additions, mostly recipes. This means it's only for ATM packs, and may not be the same for other packs. However, guides in the [Additional Guides](guides/README.md) should work for any pack with said mod. - -## Intro - -Are you new to **Minecraft**, **All The Mods**, or just need help getting started? Here you'll find some **Tips** and **Guides** on getting started with **All The Mods**! - -### Getting Started - -**All The Mods** packs require a PC that has at least **16GB** or more system RAM :material-information-outline:{ title="Random Access Memory" } for the best _playable_ experience. - -Allocating between **8-12GB** RAM is required for most of our packs. Smaller (_Lite_) designed packs can run with at least **4GB** allocated. This must be changed within [Launcher](#launchers) settings. **8GB** minimum is **recommended**. - -### Requirements - -- [x] An official **Mojang** / **Microsoft** account for **Java Edition**. -- [x] A third-party [launcher](#launchers) that can download, install, and run our packs. -- [x] A PC with at least **16GB** or more **RAM**. :material-information-outline:{ title="Random Allocated Memory" } - -### Launchers - -The most common launchers are [CurseForge](https://www.curseforge.com/download/app), [FTB App](https://www.feed-the-beast.com/ftb-app), [PolyMC](https://polymc.org/), [Prism](https://prismlauncher.org/), [ATLauncher](https://atlauncher.com/) and [GDLauncher](https://gdlauncher.com/en/). You will need one of these launchers to install packs. Sign into your **Microsoft** account and search for the modpack of your choice to install. - -!!! Info "Allocation" - - By default, in the launcher or instance (modpack) settings, **4GB** is allocated. **Recommended** MAX allocation is **8-12GB** | `8192-12288`Mb. You should **never** allocate all of or more RAM than necessary. - - Additionally, some launchers may install and use the appropriate version of [Java](help/java.md), though make sure you're using the correct version of [Java](help/java.md) for the **Minecraft** version of the pack installed. - -!!! Bug "Need Help? Check out the dedicated [Help](help/README.md) section, especially [F.A.Q](help/faq.md)" - - ------- - - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/about/README.md b/docs/about/README.md deleted file mode 100644 index 1ecd8e7..0000000 --- a/docs/about/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# About - ---- - -**All the Mods** started out as a private pack amongst a few friends that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - - -Can you get to the Creative items by making the "**ATM Star**"? - -In **All the Mods** we will continue the tradition adding many new mods while going for more stability. - -Does "**All The Mods**" really contain **ALL THE MODS**? _No, of course not._ - ---- - -## Hosting - -Need hosting? Check out **Akliz** (_With a discount_) on us! - -Start playing for only **$20**/m - -[![](../assets/images/akliz.png){style='width:200px'}](https://www.akliz.net/allthemods) - -Save **20%** off of the first month using coupon code **allthemods** - ---- - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/about/alltheteam.md b/docs/about/alltheteam.md deleted file mode 100644 index cc678da..0000000 --- a/docs/about/alltheteam.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: All The Team -description: Current Team Members! ---- - -# All The Team - ---- - -#### Owner - -- `WhatTheDrunk` - ---- - -#### Admins - -- `oly2o6` (**Second In Command**) -- `Mitchell52` -- `MutantGumdrop` -- `Maddy` -- `thevortex` -- `Ki-Tan` - ---- - -#### Modpack Development Team - -- `Arochio` -- `Billy` -- `DJNifos` -- `Drack.ion` -- `Draxial` -- `Jebraltar` -- `KJM` -- `LobsterJonn` -- `radiomike12` -- `ToshibaMicrowave` -- `ZephyrWindSpirit 🐉` - ---- - -#### All The Team - -- `1Yumi` -- `Bored` -- `Klonoa` -- `SlackerNet>XI<` -- `Timeconsumer` -- `Ultramega` - ---- - -#### Former - Retired - -- `AlfredGG` | **(Former QuestDev)** -- `EnigmaQuip` -- `Phantom` -- `Dijkstra` -- `Seg` -- `screret` -- `uʍopǝpᴉsdn` -- `BeeJnugggets` -- `0mega420` -- `Thunder_Nova the Pun_isher` - ---- - -> Current as of (04/26/2024) diff --git a/docs/about/allthetimeline.md b/docs/about/allthetimeline.md deleted file mode 100644 index 2a63ed4..0000000 --- a/docs/about/allthetimeline.md +++ /dev/null @@ -1,231 +0,0 @@ ---- -title: All The Timeline -description: Timeline of All The Mods Packs ---- - -# All The Mods: Timeline - -## 2024 -- Jan 6: All The Mods 9: No Frills (ATM9NF) -- Apr 1: Maul The Odds (MTO) -- May 30: All The Mods 9: To The Sky (ATM9TTS) - -## 2023 - -- Jan 11: All The Mods: Gravitas - (ATMG) -- Jul 25: All The Mods: Volcano Block - (ATMVB) -- Dec 17: All The Mods: Gravitas² - -## 2022 - -- Aug 03: All The Mods 7: To The Sky - (ATM7TTS) -- Oct 18: All The Mods 7: Lite - (ATM7L) -- Nov 30: All The Mods 9 - (ATM9) - -## 2021 - -- Feb 01: All The Mods 6 Sky - (ATM6TTS) -- Jul 02: All The Magic Spellbound - (ATMS) -- Aug 26: All The Mods 8 - (ATM8) - -## 2020 - -- Jan 05: All The Mods 5 - (ATM5) -- Feb 06: All The Mods Fabric - (ATMF) -- Feb 11: All The Mods Slice Of Pi - (ATMSLOP) -- Mar 31: All The Mods 0 - (ATM0) -- May 07: All The Mods 6 - (ATM6) -- Dec 08: All The Mods 7 - (ATM7) -- Dec 30: All The Mods Slice Of Pi 2 - (ATMSLOP2) - -## 2019 -- Jan 02: All The Mods Magic -- Feb 27: All The Mods 4 - (ATM4) -- Jun 26: All The Mods 3 Expert - (ATM3E) - -## 2018 - -- Aug 28: All The Mods 3 Remix - (ATM3R) - -## 2017 - -- Jun 17: All The Mods 3 - (ATM3) -- Aug 9: All The Mods 3 Lite - (ATM3L) -- Aug 17: All The Mods Expert - (Remastered) - -## 2016 - -- Mar 03: All The Mods - (ATM1) -- Sep 03: All The Mods Lite - (ATM1L) -- Oct 09: All The Mods Expert - (ATM1E) -- Oct 19: All The Sky -- Nov 16: All The Mods 2 - (ATM2) - - - - - - diff --git a/docs/about/contributors.md b/docs/about/contributors.md deleted file mode 100644 index 25f7c60..0000000 --- a/docs/about/contributors.md +++ /dev/null @@ -1,7 +0,0 @@ -# Contributors - -List of all Contributors who've helped with **Guide**, **Pack(s)**, etc.. - -{{ git_site_authors }} - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/about/feedback.md b/docs/about/feedback.md deleted file mode 100644 index 71b7ebd..0000000 --- a/docs/about/feedback.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Feedback -description: Submit your feedback -comments: true ---- - -# Feedback - -Please keep comments **PG13** - clear of profanity. - -We appreciate all of your feedback in regards to **Packs**, and **Guides**! diff --git a/docs/about/license.md b/docs/about/license.md deleted file mode 100644 index d96d882..0000000 --- a/docs/about/license.md +++ /dev/null @@ -1,30 +0,0 @@ -# License - -All The Mods (Packs/Mods) are released on curseforge only, as **All Rights Reserved**. - -This covers the following files/folders, - -- All **Quests** and rewards in `\instance\config\ftbquests\quests\` -- All custom **KubeJS** scripts in `\instance\kubejs\` -- All custom **AllTheMods PackMenu** assets in `\instance\packmenu\resources\` - -What does **All Rights Reserved** Mean? - -- For **players**, it means nothing, you are still permitted to **play**, **film**, and or **stream** the pack. -- For anyone else, it means **you CANNOT redistribute any of the above folders or files in any publicly released packs without permission from ATM** - -``` -All Rights Reserved - -Copyright (c) 2023-2024 All The Mods (AllTheMods / ATM) - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) \ No newline at end of file diff --git a/docs/atm6/.pages b/docs/atm6/.pages deleted file mode 100644 index 83c34f9..0000000 --- a/docs/atm6/.pages +++ /dev/null @@ -1,5 +0,0 @@ -nav: - - "ATM6 - To The Sky" : sky - - README.md - - F.A.Q: faq.md - - ... \ No newline at end of file diff --git a/docs/atm6/README.md b/docs/atm6/README.md deleted file mode 100644 index 5b07869..0000000 --- a/docs/atm6/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: All The Mods 6 -description: All The Mods 6 Guides ---- - -# All The Mods 6 - -[![](img/atm6Logo.png){.center}](https://www.curseforge.com/minecraft/modpacks/all-the-mods-6) - -Welcome to ATM6 Guides! - -Minimum required ram **10GB**. - -> ATM6 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-6) | [GitHub](https://github.com/AllTheMods/ATM-6/) diff --git a/docs/atm6/apotheosis.md b/docs/atm6/apotheosis.md deleted file mode 100644 index a7f6a05..0000000 --- a/docs/atm6/apotheosis.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Apotheosis -description: ATM6 Apotheosis Setups -authors: ---- - -# Apotheosis - -Overpowered enchanting, charms and bosses, apotheosis offers a variety of things to keep you busy. Don't forget to check out the Enchanment Library! - ---- - -#### Perfect Enchanting Table Setup - -**Max Eterna and Arcana, 0% Quanta** - -- 11 Draconic Endshelves -- 10 Heart-Forged Seashelves -- 1 Melonshelf - ---- - -**Max Eterna, Arcana, & Quanta / Rectification - 100%** - -- 3 - Endshelf -- 3 - Draconic Endshelf -- 12 - Pearlescent Endshelf -- 2 - Wither Skulls -- 2x - Shelf of Masterful Sight -- 5x - Shelf of End Fused Rectification (20%) - -> Apotheosis | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/apotheosis) diff --git a/docs/atm6/astralsorcery.md b/docs/atm6/astralsorcery.md deleted file mode 100644 index 3d3913b..0000000 --- a/docs/atm6/astralsorcery.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Astral Sorcery -description: ATM6 Astral Sorcery Guide -authors: ---- - -# Astral Sorcery - -
- Rock Crystal Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertiesMax TierStarlight CollectionRitual EffectRitual RangeTool DurabilityTool EffectivenessLens TransferLens AmountLens Effect
Size320%20%15%2
Purity240%40%40%15%16.67%
Shape325%25%25%10% (Up to 60%)20%
Tool Durability325%
Tool Efficiency315% (Up to 60%)
Ritual Effect330%
Ritual Range3
Collection Rate320%20%
Focus: Constellation230%30%35%
The property 'Focus: Constellation' is only active if the Focus matches the attunement of the crystal.Starlight Collection is used by (celestial) collector crystals, and by the crystal on top of a ritual pedestal.Ritual Effect is used by the crystal on top of a ritual pedestal.Ritual Range is used by the crystal on top of a ritual pedestal.Tool Durability is used by (infused) crystal tools.Tool Durability is used by (infused) crystal tools. Shape caps at tier 6 while Tool Efficiency caps out at tier 4 per tool.Lens Transfer is used for the starlight transfer through a crystal lens or a crystal prism.Lens Amount is used for obtaining more crystal lenses per craft.Lens Effect is used by crystal lenses or crystal prisms with coloured lenses in them.
Rock Crystals can hold a total of up to 7 tiers (attributes). Celestial crystals can hold 10. For example, a rock crystal can hold no more than Size 3, Purity 2, and Ritual Range 2 (3+2+2=7). Crystal tools combine the properties of the crystals used to make them.
-
- - -#### Discovery - -Get the Astral Tome + Resonating Wand. Find the first 5 constellation papers and put a crafting table near a Collector Crystal. Make sure the Crystal has a clear view to the sky. While holding the Resonating Wand in your off-hand, run/fly around the night and look for shiny spots on the ground, dig down and look for Rock Crystals. - -#### Exploration - -Craft the Lightwell, throw some Aquamarines in it, and craft the Starlight Crafting Altar. Get the Looking Glass, 8x Astral Relays and optionally a Cave Illuminator. - -#### Attunement - -Get the Linking Tool, put Iron Ore next to a collector Crystal and link the Crystal to the ore. make a bunch of Starmetal Ingots. Craft the Telescope, Attunement Altar and Starmetal Cutting Tool. Finally, the Celestial Altar. - -#### Constellation - -Get the Starlight Infuser. Get one of your Rock Crystals and throw it in Liquid Starlight together with Starmetal Dust. Craft the Iridescent Altar. Get the Starlight Infuser. - -> Astral Sorcery | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/astral-sorcery) | [Astral Perk Planner](https://gritemordle.github.io/ASPlanner/) diff --git a/docs/atm6/bees.md b/docs/atm6/bees.md deleted file mode 100644 index 6da3ae8..0000000 --- a/docs/atm6/bees.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Resourceful Bees -description: ATM6 Resourcesful Bees guide -authors: ---- - -# Resourceful Bees - -With extra centrifuge tiers, up to creative, you'll be processing combs a long time. We highly recommend you make the in game bee guide called the beepedia, bee quests and of course the manual, fifty shades of bees (in your akashic tome) for more info. - -#### Finding Bees -Make some bee jars for your adventuring. When you're out in the world, jar some bees. Keep an eye out for certain bees like the cobbee, oreo bee, and beediddy! - -#### Bee Mechanics - -You can either craft a hive or get one from out in the world. Bees will anger if they are inside or see you mine a hive. You can smoke a hive with a smoker or campfire underneath to calm the bees. Bees will retreat to thier home if its raining or at nighttime. Bees need a specific flower to pollinate before they will produce combs. Once a hive reaches honey level 5 you can use a scraper to harvest the combs. - -??? Tip "Mutating Bees" - - ```mermaid - graph LR - W[Wither] -- Dragon Egg --> D[Dragonic] - D2[Dragonic] -- All The Modium --> A[All The Modium] - A2[All The Modium] -- Vibranium --> V[Vibranium] - V2[Vibranium] -- Unobtainium --> U[Unobtainium] - U2[Unobtainium] -- Soul Lava --> SL[Soul Lava] - G[Gold] -- Netherite --> N[Netherite] - ``` - - -[Bee Breeding Chart](https://miro.com/app/board/o9J_lLqaxQ4=/?invite_link_id=68812950259) - -![IMG](img/beemutation.jpeg) - -![type:video](https://youtube.com/embed/-As76nEfLP8){width='50%'} - -![type:video](https://youtube.com/embed/0LK0C9fjl4A){width='50%'} - -> Resourceful Bees | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/resourceful-bees) diff --git a/docs/atm6/draconicevolution.md b/docs/atm6/draconicevolution.md deleted file mode 100644 index 279de8e..0000000 --- a/docs/atm6/draconicevolution.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Draconic Evolution -description: ATM6 Draconic Evolution Guides -authors: ---- - -# Draconic Evolution - -> Draconic Evolution | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/draconic-evolution) diff --git a/docs/atm6/enchanting.md b/docs/atm6/enchanting.md deleted file mode 100644 index ea19840..0000000 --- a/docs/atm6/enchanting.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Enchanting -description: OP/Master Enchanting ---- - -# Enchanting - -In ATM6, Enchantment Level are ignored when using [Enchantment Applicator](enchanting/applicator.md) diff --git a/docs/atm6/enchanting/.pages b/docs/atm6/enchanting/.pages deleted file mode 100644 index 0dcafb3..0000000 --- a/docs/atm6/enchanting/.pages +++ /dev/null @@ -1 +0,0 @@ -hide: true \ No newline at end of file diff --git a/docs/atm6/enchanting/applicator.md b/docs/atm6/enchanting/applicator.md deleted file mode 100644 index 0af7908..0000000 --- a/docs/atm6/enchanting/applicator.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Enchantment Applicator -authors: - - Seg ---- - -# Enchantment Applicator - -**Enchantment Applicator** is a machine in **Industrial Foregoing**. It's used to apply enchantments like an anvil, however it can also grant an additional enchantment level when combining the _same enchantment level_ of an **Item** and an **Enchantment Book**, ignoring enchantment levels to reach a max of level 255 (**CCLV**)!. - - -This process will require a **Black Hole Tank** (_Preferably **Supreme**_), and **Liquid XP** or **Mob Essence** inside the tank on top of the applicator to function properly. Using **Liquid XP** will only increase enchantment level up to 20 (**XX**), afterwards will require **Mob Essence**. - -After gaining an additional enchantment level, you'll want to duplicate the enchant. There's 2 known ways, - -## Duplicating Enchants - -- Disenchant and use [Botania Mana Enchanter](botania.md) to duplicate enchantment books on a new **Item**. -- Duplicate **Item** using [Mahou Projection](mahou.md). (_Only works with certain tools, **NOT ARMOR**_). - - _Armor enchants can be forced on tools using **Pedestal Anvil**_ - - -!!! Warning "Using the same **Item** in applicator will increase **Repair Costs**, making combining enchants more expensive!" - -## Making Essence - -### Converting Liquid XP - -**XP Liquid** can be converted to **Mob Essence** using **PneumaticCraft** Aeriel Interface. - -- Craft a **Dispenser Upgrade**, and placed inside **Aerial Interface**. -- Change **Dispesser Upgrade** configuration for **Mob Essence**. -- Apply 15 Bars of pressure to **Aerial Interface**. -- Pump **XP Liquid** in -> output **Mob Essence** - -### Converting XP Orbs - -**XP Orbs** can be converted to **Mob Essence** using **Modular Routers**. Any best way you can generate and feed Modular Router XP Orbs, but be careful that **XP Clumps** can cause issues. - -One way this can be done is growing **Mystical Agriculture** experience essence. - -You will need, - -- RFTools Craft (Crafts Essence into Experience Droplets) -- A Modular Router -- 9 Speed Upgrades -- Activator Module (For **Modular Router** to consume and spit out **XP Orbs**) -- Vacuum Module (To Collect **XP Orbs**) -- XP Vacuum Augment (Placed inside **Vacuum Module**, convert to convert **XP Orbs** into **Mob Essence**) -- Fast Pickup Augment (Placed inside **Vacuum Module** to make **Vacuum Module** collect faster) - -: **Module Router** will consume given experience droplets and spit out **XP Orbs**. **Vacuum module** will collect the **XP Orbs** from configured face(s). **XP Vacuum Augment** will convert the consumed XP into **Mob Essence**, which will then be automatically outputted to a tank configured face of the Modular Router. - -### Woot - -Using **Woot**, you can install the **Summit** perk. This will output **Mob Essence** through **Fluid Output** each operation (simulated mob death). The best mob to use one that has the most **HP**. - -!!! Tip "Enchants can be forced onto any item using [Pedestal Anvil!](../pedestals.md)" diff --git a/docs/atm6/enchanting/botania.md b/docs/atm6/enchanting/botania.md deleted file mode 100644 index cd34302..0000000 --- a/docs/atm6/enchanting/botania.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Botania Mana Enchanter -description: ATM6 Botania Enchanting Guide -authors: ---- - -# Botania Mana Enchanter - -**Botania Mana Enchanter** is a structure added by **Botania**. It uses **Mana** provided with **Sparks** or **Mana Spreaders** to enchant equipment with enchantments defined by **Enchanted Books** dropped nearby, _without consuming the books._ This is the slowest, yet only way to automate the process of duplicating and enchanting books using the applicator. - -## Building Enchanter - -**Botania Mana Enchanter** and **Enchantment Applicator** can both be automated with the required materials. - -??? Note "Materials" - - 3 Routers - - 3 Activator Modules - - 1 Wand of the Forest - --- - - 17 Obsidian - - 1 Lapis Block - - 1 Mana spark - - 6 Mana Pylons - - 10 Dirt/Grass blocks - - 10 Mystical Flowers - --- - - 1 Cyclic Dropper - - 3 Building blocks - - 1 Cyclic Item detector - - 2 Redstone - - 1 Redstone Torch - - 1 RFtools Timer - - 1 Vacuumulator - --- - - 5 Pipez (+1 upgrade for filtering) - - Black hole Tank - - Enchantment Applicator - - Disenchanter - - Entangled Block - - Trash can - -Build the **Multi-Block** structure shown below. **Botania Lexica** will help visually seeing block positions, then place down 3 **Modular Routers** facing into the **Mana Enchanter**, as shown below. - -![](img/kPa02o1.png){.center} - -## Routers Configuration - -: **Activator Module** for ALL 3 routers should look like this. Set the the **FRONT** face directory (_middle part of GUI_) as shown below. - -![](img/1MTtkbM.png){.center} - -=== "Left Router" - - Tool/Weapon input, keep this fed with new tools or weapons. (Ex: RS with crafting card). Be sure this is always full with a tool and set it to Pulse - ![](img/1voCURd.png){.center} - -=== "Top Router" - Tool/Weapon Output. Be sure to set this to Redstone Mode: High - ![](img/Xfo3D4W.png){.center} - -=== "Right Router" - **Wand Of The Forest**. Give it speed upgrades if possible and a wand of the forest and set it to always on, this router always tries to start an enchanting process - ![](img/blkUApI.png){.center} - -## Automation Setup - -Place a **Cyclic Dropper** 1 block away from the **Enchanter** and set to **Always Active**. Place an **Item Detector** ontop of the bottom left flower, and a redstone line on the **LEFT** router - -![](img/xnHDMnN.png){.center} - -!!! Info - The Dropper will drop an enchanted book triggering the **Item detector**, which triggers the **LEFT** router, which then puts 1 tool into the **Enchanter**. The **RIGHT** Router (with the **Wand of the Forest**) will iniate the enchanting process. - -- Place 3 blocks (_as shown below_) -- Redstone Torch on the **TOP** router (against left block) -- **RFTools Timer** (_100 Delay, with "Pause while redstone is active" enabled_) on 3rd block _facing right_ -- **Vacuumulator** with redstone on top (Set **Redstone Control** HIGH). - -![](img/BJ03fS6.png){.center} - -Setup pipes to pull out from the **TOP** router (_Enchanted Tool_), and the **Vacuumulator** (_Enchanted Book_). - -![](img/fqjil6M.png){.center} - -Pipes will then go into the **Enchantment Applicator**. **Black Hole Supreme Tank** on top of the **Enchantment Applicator**. - -![](img/kVz4z9V.png){.center} - -!!! Info - Enchanting higher levels will take more than 64 buckets (internal applicator buffer) of XP/Essence, which a **Black Hole Tank** will be required on top of the applicator to act as a secondary buffer. **Liquid XP** will work up too _level 20_, afterwards **Mob Essence** will be required. The [Applicator](applicator.md) page will explain best methods of generating XP or Mob Essence. - -Pipe the new combined Tool out of the **Applicator** and put it into a **Cylic Disenchanter** to split the 2 again - -![](img/r2Kgd5c.png){.center} - -Add a pipe, an **Entangled block** (linked to the **Dropper** at the beginning) and a **Trashcan**. Now set filters in your Pipez extraction point together with a destination tool. This makes the Book go in a loop and come back to the start of the cycle - -![](img/7chMmZ3.png){.center} - -Rightclick the side of the Entangled block which has the pipe leading into it with the destination tool, add the Book to the filter and remove the NBT tag so all books go to the dropper - -![](img/a1mMl4Q.png){.center} - -do the same with your pickaxe, remove the NBT data, so all (old) tools go to the bin - -![](img/y7r4ST2.png){.center} - -That should look something like this - -![](img/OiqfDAf.png){.center} - -Dont forget to put a spark on your Mana Enchanter and get a decent Mana Supply! -put a book into the dropper and the whole process should work automaticly. - -![](img/pwTzGmX.png){.center} - - - -> Botania | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/botania) diff --git a/docs/atm6/enchanting/mahou.md b/docs/atm6/enchanting/mahou.md deleted file mode 100644 index d77a40c..0000000 --- a/docs/atm6/enchanting/mahou.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Mahou Projection ---- - -# Mahou Projection - - -The first use of this scroll memorizes a tool or weapon you're looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability. It drains mana from the caster each time the scroll is used diff --git a/docs/atm6/envtech.md b/docs/atm6/envtech.md deleted file mode 100644 index 31df6f6..0000000 --- a/docs/atm6/envtech.md +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: Environmental Tech -authors: - - Xarrah - - Hytheria - - Seg ---- - -# Environmental Tech - -## Void Miner - -Is a multi-block structure added by **Environmental Tech**. It generates various ores, crystals, and botanicals using energy. It comes in **8 tiers**. - -![Tier 2 Void Miner (Built Upside Down)](img/1U2YaoUJ_NMRa4_4iJcsdBDC_eB8VmNW3hmG1Onsm.png){width='300px'} - -### Introduction - -There's 2 **IO** blocks that is needed for **Void Miner**. At-least 1 **Item Output** and 1 **Energy (FE) Input IO Block**, though more can be used. When supplied enough power via **FE Input IO**'s, the **Void Miner** (Based on _Tick Duration_) will output items of various types through the **Item Output IO**. - -This process can be sped up by using **Frequency** modifiers, placing them in the **Void Miner** modifier slots. Specific items can be made more likely to appear by using a colored **Laser Lens**, while this effect can be amplified by using **Amplification** modifiers. - -**Void Miner** also requires it's **Laser Core** to have a straight view to either **Bedrock** or **The Void** in order to work. - -!!! Tip "Transparent blocks such as Glass, walls, or fences may be used to provide a safe path under the structure without blocking the beam." - -### Modifiers - -Modifiers are optional to use / replaced with **Null** Modifiers if you cannot afford to craft them. You can use higher and lower tiers of **Modifiers** and **IO's** on any tier **Void Miner** multi-block, such as **Tier 5 Frequency Modifiers** on a **Tier 2 Void Miner** multi-block. This is important to note, as the **Tier 1 Void Miner** needs more power than one **Tier 1 FE Input** can give the multi-block. The solution is to either use your first two Erodium to upgrade your **FE Input**, or to use two **Tier 1 FE Inputs** on your **Tier 1 Void Miner**. - -??? Information "What is Duration & Tick Costs?" - - `Duration` - : Is how long it will take the miner, provided that it has the tick cost worth of energy supplied, to generate an item. - - `Tick Cost` - : Is the energy required per tick to allow the miner to mine at the maximum speed that is currently possible with all modifiers included. If you don't provide the tick cost amount of energy or more then your Void Miner will be slower. - -??? Information "View Modifiers" - - ``` title="Frequency | Speeds up miners - Duration." - Increases the speed of the Void Miner operation. This is visually displayed on the Void Miner CCU labeled as 'Duration'. Duration is measured in ticks needed per operation. 20 ticks is equal to 1 second in real life if you are running at 20 FPS. 1,000 Duration (or 1,000 ticks) is equal to 50 seconds. - - The Duration is lowered by upgrading your Frequency Modifiers, or by adding more Frequency Modifiers. Once your Duration hits 0, the item generation rate cannot go faster. Any further Frequency Modifiers will not affect the Void Miner's speed. They will only increase the Tick Cost. - ``` - - ```title="Bandwidth | Increases amount of mined items" - Increases the possible maximum stack size of each mined drop up to 64 items per single operation. Bandwidth Modifiers cannot be crafted until you generate Tier 5 Ionite Crystals at Tier 4 Void Miner (Pladium). Without any Bandwidth Modifiers, a Void Miner will produce 1 item per operation always - ``` - - ```title="Amplification | Gives Lenses more Accuracy (High Drop Rate)." - Increases the chance of getting the preferred ores with the Colored Lens the player is using. This is not a commonly used Modifier as in the later tiers of the Void Miner you will be producing hundreds of ores in fractions of a second (lmao) - - For example: - - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / No Lens = 5.61% chance for Gold Ore at 180 Duration (one operation per 9 seconds) - - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / Yellow Lens = 32.22% chance for Gold Ore at 180 Duration - - Tier 2 Void Miner / Four Tier 2 Amplification Modifiers / Yellow Lens = 38.24% chance for Gold Ore at 320 Duration (one operation per 16 seconds) - ``` - - ```title="Dimensional" - Allows Void Miner to gain any drop in the current dimension and requires two Tier 5 structure frames to craft. Interdimensional Modifier allows Void Miner to gain any drops from any dimension. - ``` - - ```title="Piezo" - Allows solars to gen in rain/thunderstorms from vibrations. - ``` - - ```title="Electrostatic" - Allows Lightning rods to gen passively in rain and thunder. - ``` - - ```title="Radian" - Allows lightning rod to gen passively in sunny weather. - ``` - -> **Note**: Modifiers also have tiers based on crystal tiers respectively - -### Flash Memory - -Creating a **Flash Memory** Card for **Void Miner** is vital for **Void Miner** resource generation. The **Flash Memory** tells **Void Miner** from which loot table you want to generate resources from. - -- Craft a **Flash Memory** and a **Memory Programmer** -- Give the **Memory Programmer** power and place the **Flash Memory** in the top right box -- Select the **Miner Program** you want to run, taking note of the link below - -**Void Miner** needs to generate **Crystals** from **Environmental Tech** to upgrade to the next tier. These **Crystals** are generated through the **Multi-Miner** section of the **Memory Programmer** using the **Crystal Program**. - -![](img/1oGtlPhbV2XnownrAfF4R9xyh7aGAzVMuBb7WuhC6.png){width='100%' height='auto'} - -### Lens - -**Lenses** are crafted with 5 glass in a + pattern in any crafting grid. You will need to also craft a **Lens Grinder** and supply it power to color your crafted Lens. Using lenses inside the **Lens Holder** on the **Void Miner** will increase the mine rate of certain items. - -For example, if you used a **Yellow Lens** on a **Metallic Flash Memory Program**, your miner would produce more **Gold Ore** than it usually would without the lens. You can also increase that rate even further using **Amplification** Modifiers. - -#### Crystal Lens - -**Crystal Lenses** can be crafted by placing 3x3 of the same tier crystals in a crafting grid to create a **Crystal Block**. Use this **Crystal Block** in the **Lens Grinder**. **Crystal Lenses** are highly encouraged to be used. **Crystal Lenses** often double the chance of generating the crystal matching your Lens. - -### Tiers - -??? Information "View Tiers" - - - **Litherite**: `27 Litherite` - - **Erodium**: `70 Erodium, 32 Litherite` - - **Kyronite**:` 194 Kyronite, 94 Erodium, 48 Litherite` - - **Pladium**: `224 Pladium, 224 Kyronite, 114 Erodium, 58 Litherite` - - **Ionite**: `276 Ionite, 278 Pladium, 278 Kyronite, 142 Erodium, 72 Litherite` - - **Aethium**: `362 Aethium, 358 Ionite, 358 Pladium, 358 Kyronite, 182 Erodium, 92 Litherite` - - **Nanorite**: `378 Nanorite, 558 Aethium, 374 Ionite, 374 Pladium, 374 Kyronite, 190 Erodium, 96 Litherite` - - **Xerothium**: `410 Xerothium, 606 Nanorite, 606 Aethium, 406 Ionite, 406 Pladium, 406 Kyronite, 206 Erodium, 104 Litherite` - -??? Tip "Tips & Tricks" - - !!! Quote "Seg: You know you can use T6 modifiers with T5 void miner, right? " - !!! Quote "Bamboo: The inter-dimensional modifier requires one bandwidth modifier (on the right) and one amplification modifier (on the left)" - -### Void Miner Drops - -??? Tip "Void Miner Drops Based On Lens" - - ??? Note "Mineral Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Draconium | Purple | All - | Sulfur | Yellow | All - | Cinnabar | Brown | Overworld - | Coal | Black | Overworld - | Redstone | Red | Overworld - | Niter | White | Overworld - | Glowstone | Yellow | Nether - | Biotite | Light Grey | End - - ??? Note "Magical Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Arcane Crystal | Grey | All - | Dark Runestone | Grey | All - | ~~Rock Crystal~~ | White | All - | Runestone | Grey | All - | ~~Starmetal~~ | Blue | All - | ~~Stella Arcanum~~ | Grey | All - | Vinteum | Blue | All - | Xpetrified | Green | Overworld - | Inferium | Green | Overworld - | Prosperity | Light Grey | Overworld - - ??? Note "Gemstone Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Apatite | Light Blue | All - | Certus Quartz | Light Blue | All - | Charged Certus Quartz | Light Blue | All - | Dimensional Shard | White | All - | Ruby | Red | All - | Sapphire | Blue | All - | Diamond | Cyan | Overworld - | Emerald | Lime | Overworld - | Fluorite | Pink | Overworld - | Lapis | Blue | Overworld - | Nether Quartz | White | Nether - - ??? Note "Metallic Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Tin | Grey | All - | Uraninite | Green | All - | Aluminum | White | Overworld - | Copper | Orange | Overworld - | Gold | Yellow | Overworld - | Iron | White | Overworld - | Lead | Purple | Overworld - | Nickel | Grey | Overworld - | Osmium | Light Blue | Overworld - | Platinum | Light Blue | Overworld - | Silver | Light Grey | Overworld - | Uranium | Green | Overworld - | Yellorite | Green | Overworld - | Zinc | Pink | Overworld - | Ancient Debris | Brown | Nether - | Cobalt | Blue | Nether - | Nether Gold | Yellow | Nether - | AllTheModium (**T3+** - **T6 20x More**) | Yellow | End - | Vibranium (**T4** - **T7 10x More**) | Green | End - | Unobtainium (**T5** - **T8 10x More**) | Purple | End - - ??? Note "Rocky Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Crying Obsidian | Purple | All - | Obsidian | Purple | All - | Bone | White | Overworld and Nether - | Mica | None | Nether and End - | Andesite | Light Grey | Overworld - | BOP Sandstone | Based on Colour | Overworld - | Cobblestone | Grey | Overworld - | Diorite | White | Overworld - | Granite | Pink | Overworld - | Orange Sandstone | Orange | Overworld - | Red Sandstone | Red | Overworld - | Sandstone | Yellow | Overworld - | Stone | Grey | Overworld - | Terracotta | Based on Colour | Overworld - | Basalt | Black | Nether - | Blackstone | Black | Nether - | Gilded Blackstone | Black | Nether - | Magma Block | Orange | Nether - | Netherrack | Red | Nether - | Endstone | Yellow | End - - ??? Note "Frozen Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Black Ice | Black | Overworld - | Blue Ice | Light Blue | Overworld - | Dry Ice | White | Overworld - | Ice | Light Blue | Overworld - | Snow | White | Overworld - - ??? Note "Loose Resource Drops" - - | **Ore** | **Color** | **Dimension** | - | ------- | --------- | ------------- | - | Gravel | Grey | OW and Nether - | Black Sand | Black | Overworld - | Blue Sand | Light Blue | Overworld - | BYG Glowcelium | Brown | Overworld - | Clay | Light Grey | Overworld - | Dirt | Brown | Overworld - | Limesand | Light Grey | Overworld - | Meadow Dirt | Brown | Overworld - | Mud | Brown | Overworld - | Origin Grass | Green | Overworld - | Peat | Brown | Overworld - | Pink Sand | Pink | Overworld - | Purple Sand | Purple | Overworld - | Sand | Yellow | Overworld - | Sponge | Yellow | Overworld - | White Sand | White | Overworld - | Grassy Netherrack | Green | Nether - | Nylium Soul Sand | Green | Nether - | Quartzite Sand | White | Nether - | Soul Sand | Brown | Nether - -## Solar Panel - -> Environmental Tech | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/environmental-tech) diff --git a/docs/atm6/faq.md b/docs/atm6/faq.md deleted file mode 100644 index 3817b71..0000000 --- a/docs/atm6/faq.md +++ /dev/null @@ -1,19 +0,0 @@ -# F.A.Q - -??? Question "How do I get started?" - If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide. - -??? Question "Is there a list of mods?" - Yes, on [CurseForge](README.md) - -??? Question "How to chunk load chunks?" - Chunkloading is handled by FTB Chunks. Open your map where you claim chunks and once you have a chunk claimed, shift click that same chunk. It should show a red X through the chunk, showing that it is force loaded. - -??? Question "Where can I find AllTheModium, Vibranium, & Unobtanium?" - Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book. - -??? Question "How do I deal with the Chaos Dragon?" - The chaos guardian is a multi-phase fight. The crystals can only be damaged by the dragon and it's attacks -or- chaos tier weapons, but the final hit on them will have to come from you to destroy them. Once all the crystals are destroyed, only half the time will it be susceptible to damage, when it doesnt have a blue shield. It has two health bars as well - a red over shield and then its actual HP. - -??? Question "How do you auto enchant to get OP enchants beyond vanilla?" - [Check out the Enchanting Guide!](enchanting.md) diff --git a/docs/atm6/iceandfire.md b/docs/atm6/iceandfire.md deleted file mode 100644 index b7b9f33..0000000 --- a/docs/atm6/iceandfire.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Ice & Fire -description: ATM6 Ice & Fire Guide -authors: ---- -# Ice & Fire - -Dragons only spawn in **The Other** dimension which you can reach by using a **Teleport Pad** in the Nether. _(Shift-right click with an empty hand, and nothing in offhand)_. Most of other ice and fire structure spawns are disabled. - - -## Finding Dragons - -Travel 800 blocks from spawn in **The Other**, and look for specific dragons in specific biomes. **Natures Compass** and **Spectral Eye Amulet** will help. There is also a scrying ritual from **Ars Nouveau** that can locate chests. In addition, **Corrupted Chorus Fruit** can be used to =='noclip'== through blocks, allowing you to move quickly through them and see where you're going. Higher tier dragons are in underground roosts around y35. - -## Biomes - -- **Lightning**: The Other: Desert, The Other: Desert Hills -- **Fire**: The Other: Basalt Deltas -- **Ice**: The Other: Mountains - -## Looting - -Right click with empty hand on a dead dragon corpse too loot it. - -> **Note**: Obtain Dragon Blood by right clicking a dragon corpse with a bottle. This changes the loot table so you only get bones, blood, and skulls. - -## Forges - -For each Dragon Forge, - -- **Lightning**: Unobtainium-Allthemodium -- **Fire**: Vibranium-Allthemodium -- **Ice**: Unobtainium-Vibranium - -> **Note**: Blocks (including Compressed) can be used instead of dusts, and or ingots - -![](https://camo.githubusercontent.com/7662134e2f7e0d8a92c4cb8896116c031acdd5364e1b9d3993adfaf2b14a715f/68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f3831383232313131303139373837383738342f3839323432343235373236313433373032382f647261676f6e732e706e67){style='width: 350px; margin-left: auto; margin-right: auto; display:block'} - - -> Ice & Fire Dragons | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/ice-and-fire-dragons) diff --git a/docs/atm6/mahou/.pages b/docs/atm6/mahou/.pages deleted file mode 100644 index 45b89a0..0000000 --- a/docs/atm6/mahou/.pages +++ /dev/null @@ -1,5 +0,0 @@ -nav: - - caliburn.md - - morgan.md - - mana.md - - ... \ No newline at end of file diff --git a/docs/atm6/mahou/README.md b/docs/atm6/mahou/README.md deleted file mode 100644 index 155d8b0..0000000 --- a/docs/atm6/mahou/README.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -authors: - - Xarrah - - BigFire - - Ultrameta - - Seg ---- - -# Mahou - -Mahou Tsukai Morgan and You, **Originally created by Xarrah, BigFire, & Ultramega** - -![](img/mahouTsukaiCompendium.png){width='250px'} - -#### Step 1: Set your keybinds for `Draw Mahoujin` (_mine is set to `numberpad 3`_) - -![](img/drawMahoujin.png) - -#### Step 2: Craft a Dagger (_From Mahou Tsukai_) - -![](img/craftDagger.png){width='250px'} - -1. Use the dagger (hold in main hand and right click anywhere) to inflict 'Bleeding' (lasts 15 seconds) -2. Quickly slap the hotkey you've assigned your 'Draw Mahoujin' keybinding to - -This will create a Mahou blood projection! - -![](img/mahouBloodProjection.png){width='200px'} - -**For each Boundary of Drain Life, you will need:** - -- 2 Powdered Iron -- 1 Powdered Emerald (From **MAHOU**! NOT DUSTS) - -#### Step 3: Discover Blood Projections - -Right click the blood projection with the two Powdered iron, and one powdered emerald. Then right click to activate - -![](img/boundaryOfDrainLife.png){width='350px'} -![](img/boundaryOfDrainLifeProjection.png){width='200px'} - -### Notes - -> Fastest to set up is probably durability drain, where you cycle a bunch of low tier gear/tools across a bunch of chests, and set your storage system to keep them in stock (or pipe them out right before they break to a diamond anvil) - **BigFire** - -> another one is the popular life drain with mob farm. you'd probably want 20-40 of these circles down and a really quick spawner. need good garbage collection and xp collection for this else it'll lag/crash server. also not so good for server performance - **BigFire** - -[Continue To Caliburn](caliburn.md) - -> Mahou | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mahou/book.md b/docs/atm6/mahou/book.md deleted file mode 100644 index e9825ad..0000000 --- a/docs/atm6/mahou/book.md +++ /dev/null @@ -1,456 +0,0 @@ ---- -title: Mahou Book -description: All pages of Mahou ---- - -# Mahou Book - -A mahoutsukai, simply, is a magic user. And congrats! You are one such magic user. - -Let's first see how to draw a circle in blood. It's easy - just take damage, and quickly use the keybind to draw a circle in blood on the floor. If successful, you'll see a blood circle on the ground, and a mana bar (Mahou X/Y) somewhere on your screen. Note: there is a dagger to damage yourself, if you prefer. - -??? Info "Alarm Boundary" - The Alarm Boundary is perhaps the most basic of boundary magic - it simply alerts you to mobs and players as they enter the range of the boundary. - - It drains mana from the caster every second(s). - - Alarm boundaries will also output a comparator value of 15 when it detects anything in the boundary. - -??? Info "Alchemical Exchange" - This circle will, once a day around the time of placement, convert blocks underneath it into random other blocks of the same class. For example, dirt may become sand, diamonds may become emeralds, etc. However, this only works on natural blocks, and will not work on things such as bricks or diamond blocks. - - It drains mana from the caster per transformation. - -??? Info "Ascension" - This spell, when used without a cloth, will teleport any thing (including items and mobs) on top of it to the highest solid Y value it can find. The scroll version of this spell will simply transport the caster. - - It drains mana from the caster per teleport. - -??? Info "Binding Eyes" - When used, eye contact between the caster and any mob or player binds that mob or player in place. Players, however, can escape this binding by simply breaking eye contact. - - It drains mana on use. - -??? Info "Black Flame Eyes" - When used, black flames will sprout at the caster's viewing location for a short time. These flames spread somewhat quickly, but do not consume blocks and inflict wither damage to those who come in contact with them. - - It drains mana from the caster on use. - -??? Info "Borrowed Authority" - Borrow the authority of the gods with this scroll, which increases the caster's speed and power, to the extent that mobs hit while using it will break through walls. - - It drains mana from the caster on use. - -??? Info "Boundaries" - Boundaries are a category of AOE spells which operate in a radius around a placed circle, and drain mana on a fixed basis. You can turn them on and off by right clicking them. A redstone signal will also invert their on/off status. - - Boundaries give off comparator output - 0 when off, 1 when on. - - Lastly, boundary scrolls can be used to quickly place boundaries in another location. - -??? Info "Butterfly Effect" - When this scroll is used, the caster is granted Foresight for a short duration. During this time, breaking/placing a block, or swinging a weapon will be delayed for the future. A butterfly will mark the spot, and things colliding with this butterfly will trigger its effect. - - WARNING: DO NOT USE ON IMPORTANT BLOCKS. - - This spell drains mana from the caster upon use. - -??? Info "Catalyst Exchange" - When placed on the floor, this circle will convert any powdered catalysts on top of it into a new random powdered catalyst. - - It drains mana from the caster per transformation. - -??? Info "Catalysts" - There are seven catalysts representing each of the known categories of magic. Powdered Catalysts are created by taking a Hammer or a Mortar and Pestle, and smashing these catalysts. - - The categories are: - - - Iron - Boundaries - - Ender Pearl - Displacement - - Diamond - Projection - - Emerald - Exchange - - Gold - Mystic - - Quartz - Intelligence - - Ender Eye - Mystic Eyes - -??? Info "Categories" - - Boundaries deal with AOE effects centered on a magic circle. - - Displacement spells deal with teleportation magic. - - Projection spells deal with weapons. - - Exchange spells usually involve a trade of some sort, often to refund or generate mana. - - Mystic spells are unique, often offensive spells, which provide miscellaneous effects. - - Mystic Eyes spells deal with sight based effects. - - Intelligence spells deal with decision making, often focused around entities. - - There are also some rumored secret spells.. - -??? Info "Chronal Exchange" - When placed on the floor, this circle will generate mana for 12 hours, centered on the time of placement. For the other 12 hours, it will drain mana from the caster, gems, or mana circuits. - - It will drain or restore up to mana every so often, depending on how far it is from its peak. Note that skipping time will only delay the cycle, instead of skipping it. - -??? Info "Circuits" - Mana Circuits are blocks which store mana. Mana in them can be used by the player when nearby, as long as the player owns the block. Whoever right clicks a mana circuit first after it is placed owns the block. Right click to put mana in. Shift right click to turn it on or off. Mana Circuits can be right clicked with Fae Essence to open them to use by other players. - -??? Info "Clairvoyance" - When used, the caster will be able to see the predicted path of certain mobs. Unfortunately, some mobs are an enigma and cannot be predicted accurately, such as skeletons. - - It drains mana on use. - -??? Info "Clarent" - A strengthened sword forged in dragon's breath, Clarent has one purpose: to overthrow the king. - - Rather than retaining a damage value, Clarent instead does the damage of its opponent's weapon. - - Clarent's passive, Vengeance, allows it to block attacks. Clarent remembers these attacks, and in its next attack will release its pent up frustrations. - - Lastly, Clarent has the ability to mortally wound its target, leaving them wounds that will damage them should they move too quickly. - -??? Info "Contract" - When two players create their own contract circles, and stand on them nearby, a contract will be formed between the players. Contracts allow players to bypass certain effects such as boundaries and some mystic eyes. To break a contract, one player need only damage the other. - - It drains mana from each player when a contract is formed. - -??? Info "Cup Of Heaven" - The most complex spell, and used primarily as a way of applying mass negative effects. When many of these circles are placed on the floor and activated by a scroll, the external convex polygon (google: Graham Scan) is calculated. The prime factors in the external polygon and those in the internal polygon determine the negative effects. All mobs and players within the external polygon at the time of activation receive these effects. - - For example, if a pentagon is made with 5 of these circles, with 4 internal circles (placed anywhere inside the pentagon), the affected mobs will receive Poison 2 and Blindness 1. Why? 4 = 2 * 2. The prime factor 2 maps to poison, and the prime factor 5 maps to blindness. These prime factors go up to 13, including Poison (2), Weakness (3), Blindness (5), Slowness(7), Wither (11), Levitation (13). - - For a cup of heaven which grants poison 1 and wither 1, for example, you could simply create a 22-sided polygon and all mobs inside would be affected. - - Mana cost varies depending on the effects and area covered. - -??? Info "Damage Exchange" - When used, the player will convert damage taken into mana a set number of times (not time-based). - - It drains mana on use. - -??? Info "Damage Replication" - When used on another mob or player, this scroll will replicate damage and potions that affect the caster to the target. - - It drains mana on using the scroll. - -??? Info "Death Collection Eyes" - When used, the caster collects souls upon seeing death - this death can occur in any way, but the caster does have to be looking at it. If the caster has collected enough souls, their death will be prevented in exchange for souls, whether or not the eyes are active. - - It drains mana from the caster on use. - -??? Info "Displacement Boundary" - The Displacement Boundary teleports entities that attempt to enter the range of the boundary to the other side of the boundary. In doing so, it will attempt to displace blocks that would suffocate said entity. - - It drains mana from the caster every second(s). - -??? Info "Drain Life Boundary" - The Boundary of Drain Life slowly drains health from nearby mobs in a range of. For every health drained, health, hunger, or mana is restored to the caster, in that order, according to the caster's needs. - - It drains mana from the caster every second(s). - -??? Info "Durability Exchange" - When placed on the floor, this circle will convert the durability of items on top of it into mana. Alternatively, it can do so from a chest underneath it as well. - - It can restore a maximum of mana per second. Note that higher durability items are consumed faster. - -??? Info "Emrys" - A staff named after it's original owner, a backwards mage who couldn't decide which weapon was his favorite, Emrys is intended to be used in the off-hand. It provides strength in the form of lightning to an empty right hand, melee weapons, and some projectile weapons. - - The mage who created the staff luckily documented his struggles - simply get struck by lightning while holding a strengthened stick. - -??? Info "Enclosure Boundary" - The Enclosure Boundary raises the floor around you to create a makeshift set of walls with radius. - - It drains mana from the caster for every layer of blocks that it raises. - -??? Info "Equivalent Displacement" - An Equivalent Displacement circle on the ground can be linked (by shift-right-clicking) to another equivalent displacement circle anywhere in the world or across dimensions. However, a teleport between the two can only happen if there is something on BOTH circles. That something can be an item or mob, and the chunks must be loaded. - - It drains mana from the caster per teleport. - -??? Info "Explosion Staff" - This scroll summons a staff with explosive power. The staff has a long charge up time (the beam in the middle indicates readiness), and creates a large explosion. Shift right clicking with the staff will change it to fire multiple, smaller, explosions, and shift right clicking again will enable a beam mode. - - When in beam mode the staff's damage accelerates the longer the beam is held. Also, the beam will destroy blocks it comes in contact with. - - The scroll drains mana from the caster, mana when using the large explosion mode, mana when using the AOE explosion mode, and mana per tick when using the beam mode. - -??? Info "Fae" - The Fae are spiritlike creatures that occasionally roam the earth. Like leylines, they can also only be seen with Mystic Eyes of Fay Sight. Their laughter sounds like bells, and they drop Fae Essence upon death. - - The Fae are particularly attracted to magic being performed on leypoints. - - They are breedable through the use of any Powdered Catalyst. - -??? Info "Fae Essence" - Fae Essence is dropped by the fae. Right clicking with fae essence will place a fae circle. Scrolls and stationary circles created by fae essence can be used by anyone. You can claim a fae circle by right clicking it, and it will drain mana from you when used. Most importantly, because Fae Essence is not bound to a user, it is ideal for automated scroll creation. - -??? Info "Faecake" - Like a cupcake, but with fae essence. Watching you eat this disgusts the Fae, to the point where they will avoid you even if you perform magic on a leypoint. Reawakening the Mystic Eyes of Fay Sight is a good way to get rid of the effects of the faecake, as the Fae are quite partial to those who can see them. - -??? Info "Fallen Down" - Give your friends, enemies and acquaintances the burial they deserve! It may be best not to do this near things you care about, though. - - This spell costs mana every fifth of a second. Naturally, the longer you channel it, the deeper the grave. Your friends should thank you, really. Note: Flight is a natural counter to this spell. - - If you shift right click with a Fallen Down scroll, it will switch to beam mode, which will terraform and burn the surrounding mobs and land. - -??? Info "Familiar Exchange" - When used, the caster will switch places with the familiar if it exists. - - It drains mana from the caster on use. - -??? Info "Familiars Garden" - When used while a familiar is active, the familiar will activate its garden. Mobs and players in the garden will not be able to harm each other. The affected area moves with the familiar, and particles are produced to show the area. - - It drains mana from the caster on use. - -??? Info "Fay Sight Eyes" - Very simply, this spell allows the player to see Leylines and the Fae. - - It drains mana from the caster on use. - -??? Info "Fog Projector" - The Fog Projector is a decorative block which can be used to display and control two types of fog - particle and camera-based. It allows you to control the color as well as thickness of each type of fog, along with other attributes. - -??? Info "Gandr" - A primeval curse which gains power based on the user's magical capability. Requiring a percentage of the user's mana capacity, when fired, this curse scales damage depending on the amount of mana spent to fire it. - - Furthermore, this curse will absorb and cleanse any negative effects the user may be experiencing, and spread them around its point of impact. - -??? Info "Geas" - Geasa are self-imposed taboos. By placing a geas on oneself, you can prevent yourself from doing some undesirable things. - - For example, using it on a player will prevent you from harming that player. Using it on a sheep will prevent you from harming any sheep. - - Using it on a named sheep will prevent you from harming that specific sheep. Lastly, using it on a dropped item, will prevent you from picking up that item. Use it without a target to see your current geasa. Creating and removing geasa costs mana each, and having many geasa targeting unnamed mobs will regenerate mana. - -??? Info "Gems" - If you craft an Attuner with a Diamond or Emerald, you can get an attuned gem. These gems will store mana for you, if you right click while holding the gem. Spells will automatically draw from any gems on your person. - -??? Info "Gravity Boundary" - The Gravity Boundary increases the gravity for mobs other than the caster in an area of range. - - It drains mana from the caster every second(s). - -??? Info "Immunity Exchange" - This scroll can be used on either the player or something the player is looking at. The target of the scroll will take no damage from repeated damage sources, but will take double damage from a damage source that was different from the last one. - - It drains mana from the caster on use. - -??? Info "Insight" - The Mystic Eyes of Insight allow the user to see more information about a target, such as its inventory, and, in the case of living creatures, their buffs, debuffs, etc. The mana cost is per scroll. - -??? Info "Kodoku" - Kodoku refers to the practice of encouraging conflict between a number living things, and then harnessing the strongest surviving thing's essence for power using special Kodoku worms. - - Every time a monster kills something, their kodoku value goes up by 1, plus the kodoku value of the monster it killed. When you have a specimen with a high kodoku value, simply place a hungry kodoku worm on it (right-click) and kill the specimen. - - When a worm consumes the essence of a mob with a high kodoku value, you can simply right-click to pick it up. Worms with high kodoku values have a number of uses. - - When burned, these worms will generate mana for any nearby mana circuits. The amount of mana depends on how close to a leyline the burning occurred. - - These worms can also be used for sympathetic magic. - - Sympathetic Magic refers to a symbolic magic, in which a target can be affected remotely through the use of a symbol. - - To use a scrying circle for sympathetic magic, it must be actively scrying something. Also, an inventory under the scrying circle must contain Kodoku worms to act as fuel. Worms with higher kodoku values will increase the chance of successful sympathetic magic. - - When an active scrying circle with Kodoku worms underneath is set up, simply throw items for various effects on top of the circle. - - - Blaze Powder - Fire - - Rabbit Foot - Hop - - Splash Potions - Effects - - Glowstone Dust - Glowing - - Rotten Flesh - Hunger - - Kodoku worms - Misfortune - - Misfortune applies various effects such as being struck by lightning, dropping items, negative looting, tripping, breaking tools, increased aggro, with chances scaling depending on the quality of the worm. - - - Ender Pearl - Teleports target (Players must have a contract with caster to be teleported) - - Nether Wart - Confusion - - You can counter sympathetic magic against yourself by keeping a worm with a high kodoku value in your inventory. The higher the value, the less likely the magic will succeed against you, and there's even a chance it will be reflected to the caster. - -??? Info "Leylines" - Leylines connect certain points throughout the world. They can only be seen with Mystic Eyes of Fay Sight. Being near a leyline or leypoint increases mana regeneration based on a percentage of your maximum mana. - - The Fae spawn near leylines. - - Furthermore, Leylines will boost elytra if you fly along the leyline. - -??? Info "Magic" - To perform Magic, we need a few things - mana, (optionally, depending on the recipe) a cloth, a blood circle, and 3 powdered catalysts. If the recipe is for a scroll, you'd put the cloth down first, and then draw a blood circle on top. Otherwise, simply put the circle on the floor. Take your powdered catalysts and right click the circle to add them to it. - -??? Info "Mana" - Using mana increases your maximum mana capacity over time - it's like exercising. You will naturally recover some mana over time, depending on how full your hunger is. Sleeping will regen a good chunk of your mana, and sleep is important, so sleep often! - -??? Info "Mental Displacement" - A mental displacement scroll allows the caster to temporarily leave his body behind and explore the world in a certain radius. - - It drains mana from the caster on use. - -??? Info "Morgan" - This wicked sword is the result of the corruption of the holy sword Caliburn. Obtained through the murder of a player's best and most loyal friend with the holy sword Caliburn, this sword obtains its power not from a mysterious lake, but from the killing of innocents. - - Villagers, and more so, child villagers, provide a damage bonus for this sword (requires mana), and also heal any damage the sword has. - - Holding right click with this sword releases a ball of evil to stab and pull nearby enemies. Lastly, pressing the keybind with the sword equipped provides a Rage effect, which very briefly boosts attack speed and walking speed. - - Both of these abilities invoke a cooldown that prevents either from being used. - -??? Info "Mystic Code" - The Mystic Code is an item which holds three stacks of scrolls. Shift right click opens the inventory. The keybind switches between the scrolls. Clicking or holding right click uses the currently selected scroll. - -??? Info "Mystic Code First Sorcery" - The Mystic Code - First Sorcery is a variant of the mystic code, which has a set durability, but also allows for the reuse of scrolls it contains. - -??? Info "Ordered Displacement" - An Ordered Displacement circle on the ground teleports any thing on top of it to a nearby Ordered Displacement circle. Which one it teleports you to depends on the order in which you placed the circles. You can sneak to stop teleporting. - - It drains mana from the caster per teleport. - -??? Info "Power Consolidation" - This circle, when placed on the floor, will spawn a lake. Each growth of the lake costs mana. When the lake has reached full size, the caster can throw in an enchanted sword in order to get Caliburn, a holy sword which will have the damage of the sword plus extra based on its enchantments. (hint: holier is better!) - - Exchanging a sword costs mana. - - The holy sword, Caliburn, has several properties. First, undead and unholy monsters will fear it and attempt to flee. Second, right-clicking will pull both the caster and such monsters closer. Using the keybind, the sword can smite such monsters, with a cooldown. As Caliburn is a sword, the Power Consolidation process can be repeated by simply enchanting it. - - Caliburn seems to have some innate limits - maybe there are some items you could offer to the lake with Caliburn, as proof of your purity, to remove these limits? - -??? Info "Presence Concealment" - A Scroll of Presence Concealment grants the user the two Rippers in exchange for mana. - - When one Ripper is wielded, right clicking will create a thick fog around either the user, or a target the user was looking at. Doing the above with a Ripper in either hand will provide true presence concealment, in addition to the fog, rendering the player and his items invisible. - - Because The Rippers are intended to be dual wielded, it is possible to attack with both simultaneously. Furthermore, attacking from behind a target with a Ripper will deal bonus damage. - - Take note that your invisibility will disappear temporarily after you attack, but it will return shortly after. Monsters may or may not be able to track you after you disappear again, so it is recommended to move quickly. - -??? Info "Probability Alter" - Place at least 2 of these circles on the floor within range of the caster, each with a chorus fruit (see config) on top. - - The number of nearby circles with chorus fruits when the scroll version of this spell is used becomes the Modulus of the Rule Breaker given by the scroll. This scroll costs mana to use. See Rule Breaker's page for more details. - -??? Info "Projectile Displacement" - A Projectile Displacement scroll teleports you to the last arrow you shot. - - It drains mana from the caster on use. - -??? Info "Projection" - The first use of this scroll memorizes a tool or weapon you're looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability. - - It drains mana from the caster each time the scroll is used. - -??? Info "Projector" - The Mahoujin Projector is a decorative block, which simply displayes runes and a magic circle. Right clicking on the block allows you to configure the size, angle, color, speed, etc. You can load in custom circles and runes through the config. - - The Mahoujin Projector is also wearable! Right click with an armor item on a projector to receive a special enchantment that displays that projector's settings. Right click again to get new settings after modifying. - - Also, you can copy and paste from projector to projector by right clicking to copy, and shift right clicking to paste with a normal stick. - -??? Info "Protective Displacement" - Ever wondered what it's like to be an Enderman? The Protective Displacement scroll will randomly teleport you when you would otherwise have been hit by an arrow. - - It drains mana from the caster when used, and provides a set number of teleports - it is not time based. - -??? Info "Proximity Projection" - Using this scroll grants the caster a weapon, which allows the caster to simultaneously teleport to and attack an entity they can see at long range. - - It drains mana from the caster on use of the scroll. - -??? Info "Reality Marble" - This scroll teleports the user (and optionally, a target the user is looking at) to a fixed spot in the Reality Marble. If the user has a target, one of the two must die for the other to leave. Otherwise, taking damage will allow the player to leave. - - It drains mana from the caster on use. - -??? Info "Recall Familiar" - When used, the player's familiar, if it exists, will be recalled to the player. - - It drains mana on use. - -??? Info "Replica" - When you're done defending yourself, it's about time you start defending your friends. Replica is a mainhand greatshield with a number of abilities, granted to those who have just about maxed out their defensive capabilities, yet still feel the need to use a shield. - - Note the following controls carefully: - - AOE Teleportation: Save a location with shift+right click. Teleport to it later, along with everything around you by blocking with the shield and pressing. Break a block with Replica to toggle teleporting friendlies only. - - Cover Move: Sprint towards a teammate and block to place yourself between them and their closest, most threatening enemy. - - Shockwave: Simply blocking with this greatshield is enough to knockback surrounding opponents, dealing damage according to the number of nearby allies you have. - - Replicate: Replica has the ability to remember up to 6 damage types that it has blocked. You can choose Shockwave's damage type by pressing. - - Note that allies refers to those for which the wielder of Replica has a geas or a contract with. - - To get Replica, block an attack with a strengthened shield, in your main hand, while also having Immunity Exchange, maximum Damage Absorption stacks, above 15 armor, and over 100 Death Collection souls . - -??? Info "Retribution" - A Scroll of Retribution exchanges the health percentage of the caster with the health percentage of the target. It drains mana based on the difference between the user and target's health. The cost is times the difference in health points. - -??? Info "Reversion Eyes" - When used, mobs and players in the caster's view will lose their buffs, along with certain other qualities, depending on the mob. Water mobs will no longer breathe underwater - nether mobs will be affected by fire and lava. Endermen, Shulker boxes and the Wither will no longer be immune to arrows. Husks can catch fire in the sun. - - It drains mana from the caster on use. - -??? Info "Rho Aias" - This scroll creates a large shield in front of the caster in the direction it is used. Mobs bounce off of it, and various projectiles are deleted by it. If desired, the caster can also bounce on it by sneaking. - - It drains mana on use. - -??? Info "Rhongomyniad" - The Holy Lance, Rhongomyniad, is acquired by throwing a lance into the lake of a Power Consolidation ritual. The Lance Which Brings Stability to the World, Rhongomyniad, can first and foremost act as a normal lance - it can unseat opponents in a joust, depending on its weight and damage, and the speed of the rider. Furthermore, mounted wielders of Rhongomyniad will gain speed in the presence of evil. - - Rhongomyniad can be placed using shift right-click, where it assumes its role as a purveyor of punishment. Evil creatures and persons, including those who would do harm to those who are not evil, will be smitten within Rhongomyniad's range, according to Rhongomyniad's current attack damage. This will continually drain mana. Right click on the placed lance to re-collect it. - -??? Info "Rule Breaker" - Acquired through the use of the Probability Alter spell, this dagger allows the user to control their personal probability through the Modulus and Dividend of the dagger. While the modulus is set at creation, the dagger's dividend can be increased by shift right clicking. Specifically, when right clicking with Rule Breaker, the caster will receive a timed buff that returns a specific random number when requested from the player. - - Furthermore, this effect is also applied when hitting things with the dagger. - -??? Info "Scrying" - A Scrying circle on the ground allows the player to see a named mob or player from afar, for a short amount of time. Simply drop a nametag on the circle, and if a mob or player with this name exists, it will be shown with its surroundings. - - It drains mana from the caster per nametag. - -??? Info "Selective Displacement" - Use this scroll to receive a buff. While active, tap the0 keybind to swap places with a target entity. Alternatively, hold the keybind to select two entities, and switch them instead. - - There is a short cooldown between swaps. This scroll costs mana. - -??? Info "Shared Vision" - When used on a mob or player, the caster will see through its eyes. - - It drains mana from the caster on use. - -??? Info "Spatial Disorientation" - Using this scroll summons a staff which can be used on an entity to launch them in the direction the caster is looking. Longer charge time provides more velocity. Alternatively, when used on a block, nearby entities will be pulled in and launched, after a charge up time. - It drains mana from the caster on use of the scroll, mana when used on an entity, and mana per second when used in AOE mode. - -??? Info "Strengthening" - A Strengthening scroll will strengthen the first thing on your hotbar, or your off-hand if you're holding something. Strengthened items are temporarily unbreakable, do more damage, and have increased mining capabilities. - - It drains mana from the caster on use. - -??? Info "Summon Familiar" - When used, the player summons a familiar. This familiar will report on interesting players, mobs, and blocks that it sees, and will chunk load the area around it. You can right click a familiar with a block to make it only report that block if it finds one. Right clicking without a block will reset this. - - It drains mana on use. - -??? Info "Tangible Boundary" - The Tangible Boundary is a large invisible barrier with range that you can pass through, but mobs, arrows, and other entities cannot. It will not replace solid blocks other than grass, nor will it replace water. - - It drains mana from the caster every second(s). - -??? Info "Treasury Projection" - This scroll give the user a gauntlet which will project weapons and tools from the user's treasury - their inventory, some modded bags, and their ender chest, and fling them at the target block they are looking at. - - It drains mana on using the scroll, and mana per weapon projected. - - The gauntlet has two other modes upon pressing shift right-click. In AOE mode, weapons will be fired from behind you towards the direction you're looking at, and in Chains mode, chains will spawn near the target you're looking at and, if the target is a creature, attempt to hit them when right-click is held while staring at it. - -??? Info "Weapon Projectiles" - Using this scroll grants the caster a bow, which can shoot tools and weapons. - - It drains mana from the caster on use of the scroll. - -> Mahou | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mahou/caliburn.md b/docs/atm6/mahou/caliburn.md deleted file mode 100644 index b3b8541..0000000 --- a/docs/atm6/mahou/caliburn.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -authors: - - Xarrah - - BigFire - - Ultrameta - - Seg ---- - -# Caliburn - -#### Step 4 -Allocate three large areas to your **Mahou Tsukai** adventure (_I use a **19x19** area for the Mahou lake, a **10x10** area for the mob damage farm, and a **11x9** area for the villager kill farm_) - -![](img/mahouLake.png){width='250px'} - -#### Step 5. Enchant a diamond sword - -> **Note**: The more **Smite** levels your sword has, the greater the base damage the **[Caliburn](caliburn.md)** will have. - -#### Step 6. Creating The Lake - -After you have gathered enough **Mahou Tsukai** [Mana](mana.md) (about **10,000**, or a full **Attuned Diamond**) you are ready to place -A **Blood Circle** in the center of your **19x19** area. Fill this **Blood Circle** with two **Powdered Diamond**, and **One Powdered Emerald** (FROM **MAHOU**!) -Once the Lake is fully formed, there will be **FOG**! - -![](img/powerConsolidation.png){width='350px'} - -Drop your **enchanted** diamond sword in and ensure you have at-least **5000** [Mana](mana.md). -Search for the **[Caliburn](caliburn.md)** in the lake to retrieve it! - -#### Attuned Diamond / Emerald - -Acts as [Mana](mana.md) capacitors. [Mana](mana.md) slowly decreases over time - Attuned Diamond / Emerald store unused [Mana](mana.md) for later use ([Mana](mana.md) in these do not decrease over time) - -[Continue To Morgan](morgan.md) - - -> Mahou Tsukai | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mahou/durabilityexchange.md b/docs/atm6/mahou/durabilityexchange.md deleted file mode 100644 index aa3a66b..0000000 --- a/docs/atm6/mahou/durabilityexchange.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -authors: - - Xarrah - - BigFire - - Ultrameta - - Seg ---- - -# Durability Exchange - -![](img/durabilityExchange.png){width='350px'} - -**Obsidian Sheaders** have over a million durability, but Mahou Tsukai caps durability exchange at like **2,500** durability but the recipe is cheap and easy so that's why I use it since each **Durability Exchange** spell circle can restore a maximum of 10 mana per second, you will need a large amount of spell circles and chests for you to be able to gain the mana you need to efficiently swing your [Morgan](morgan.md) at villagers for damage gain - -![](img/obsidianShears.png){width='250px'} - -![](img/rsSetup1.png){width='100%'} -![](img/rsSetup2.png){width='50%'} - -> Mahou | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mahou/mana.md b/docs/atm6/mahou/mana.md deleted file mode 100644 index 8fe0643..0000000 --- a/docs/atm6/mahou/mana.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -authors: - - Xarrah - - BigFire - - Ultrameta - - Seg ---- - -# Mana - -Top left you should see a Mahou manu bar. If not run `/showmahou` - -![](img/mahouManaBar.png) - -#### Step 8. Create an enclosure for Mahou Mana generation - -![](img/mahouManaGen.png) - -- **Ethereal Glass** is solid for mobs, but players can pass through it. -- **Conveyor Belts** push the mobs into the Mahou spell circles (_that damage them for mana_) -- **Wireless Redstone Reciever** is used to toggle the mob spawner on from a distance. (_spawner must have redstone comparator upgrade_) -- **Absorption Hopper** sucks up the mob drops and experience orbs. (_it is recommended to hook up a tank for the absorption hopper to deposit liquid XP into_) -- **Item Pipez** move the drops from the absorption hopper into the trash cans. (_My item pipe has an Ultimate Pipe Upgrade inside for quick item transfering_) -- **Dark Connected glass** prevents light from passing through and makes for a clear viewing window - -The purpose of this farm is to drop mobs onto the Mahou damage spell circles, where they lose life (this gains you mana and increases your mana cap since the spell circles use 5 mana per 1 second) and then trash the drops (optional). - -> Image has 36 Boundary of Drain Life spell circles (6x6). - -#### Step 9. Create an enclosure for your Villager spawner - -![](img/villagerSpawner.png) - -- My enclosure uses **Solid Dark Zychorium Bricks** and **Dark Connected Glass**, but any blocks may be used (_as with the Mahou Mana Generation enclosure_) -- I have a **Wireless Restone Reciever** attached to the Villager spawner; the spawner is upgraded with a **Redstone Comparator** -- Use **GPS Data Cards** on the **Wireless Redstone Recievers** to link the **Wireless Transmitter** so that the Lever starts up both the Mana Generation Farm and the Villager Spawner - this will increase your mana (and cap) at the same time as you kill villagers for the **Morgan**. - -![](img/wirelessTransmitter.png){width='250px'} -![](img/wirelessTransmitterGui.png){width='250px'} -![type:video](img/villagerKillExample.mp4){width='500px'} - -> Mahou | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mahou/morgan.md b/docs/atm6/mahou/morgan.md deleted file mode 100644 index e028b5d..0000000 --- a/docs/atm6/mahou/morgan.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -authors: - - Xarrah - - BigFire - - Ultrameta - - Seg ---- - -# Morgan - -### Rejecting Humanity - -![](img/ripWolf.png) - ---- - -## Step 7. Kill a [Tamed Wolf](https://minecraft.wiki/w/Wolf) with the Caliburn - -![](img/morgan.png){width='300px'} -![](img/iRejectMy.png) -![](img/humanity.png) - ---- - -#### Congratulations! You have a Morgan! - -Increase your **Morgan**'s Attack Damage by killing villagers (you must actively have or be generating [Mana](mana.md)) - -[Continue To Mana](mana.md) - -> Mahou | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm6/mekanism.md b/docs/atm6/mekanism.md deleted file mode 100644 index 513caee..0000000 --- a/docs/atm6/mekanism.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Mekanism -description: ATM6 Mekanism Guide -authors: ---- -# Mekanism - -To get started in **Mekanism** you just need **coal**, **osmium**, **redstone** and **iron** to make some **steel**. The Official [Mekanism Wiki](https://wiki.aidancbrady.com/wiki/Main_Page) has a lot of information on the setup of machines and how they can be used. Also, the Surviving with **Mekanism** series by **RagePlaysGames** is top notch! Every video has chapters so you can easily skip to the section you need, and each video is divided into **intro**, **mats**, **crafting**, **building**, and **how to use**. You can't go wrong. - - -![type:video](https://www.youtube.com/embed/EC6S9k54Mp4?si=2BwdTw8O5G_xeDz5) - -??? Tip "Fission Reactor Diagram" - - ```mermaid - graph TD - W(((Water))) --> ES_O[Electrolytic Separator] - S(((Sulfur))) --> CO_SD[Chemical Oxidizer] - U(((Uranium))) - ES_O -- Oxygen --> CO_SD -- Sulfur Dioxide --> CI_ST[Chemical Infuser] - W --> RC_WV[Rotary Condensentrator] - CI_ST -- Sulfur Trioxide --> CI_SA[Chemical Infuser] - RC_WV -- Water Vapor --> CI_SA - F(((Fluorite))) --> CDC_HA[Chemical Dissolution Chamber] - CI_SA -- Sulfuric Acid --> CDC_HA - CDC_HA -- Hydrofluoric Acid --> CI_UH[Chemical Infuser] - - U ----> EC_YCU[Electrolytic Separator] - EC_YCU -- Yellow Cake Uranium --> CO_UO[Chemical Oxidizer] - CO_UO -- Uranium Oxide --> CI_UH - - CI_UH -- Uranium Heaxfluoride --> IC_FF[Isotopic Centrifuge] - IC_FF -- Fissile Fuel --> R{REACTOR} - ``` - - -!!! Warning "Accidentally leaked radiation? `/mek radiation removeAll`, `/mek radiation heal`" - -> Mekanism | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mekanism) diff --git a/docs/atm6/pedestals.md b/docs/atm6/pedestals.md deleted file mode 100644 index 596b390..0000000 --- a/docs/atm6/pedestals.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Pedestals -description: ATM6 Pedestal Guide -authors: ---- - -# Pedestals - -The mod that can do just about anything.... But how? - -#### Linking Tool - -With a diamond and some dye, your first step into pedestals is the linking tool. This tool will allow you to make blank pedestals and blank upgrades for the pedestal - -#### Cobblestone Generator - -Your next step should be the cobblegen. Place a pedestal and put the cobblegen upgrade in your offhand and then right-click the pedestal to apply it. If you want to link two pedestals, shift right-click with the linking tool on the recieving pedestal and then do the same to the sending pedestal. - -#### Enchanting - -![type:video](https://youtube.com/embed/iBCgdjJQQh4) - -#### Force Enchanting - -![type:video](https://youtube.com/embed/XnQSgaO_xjI) - -> Pedestals | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/pedestals) diff --git a/docs/atm6/silentgear.md b/docs/atm6/silentgear.md deleted file mode 100644 index 8fbef33..0000000 --- a/docs/atm6/silentgear.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Silent Gear -description: ATM6 Silent Gear Guide -authors: ---- - -# Silent Gear - -The possibilities are endless with Silent Gear. The examples below simply show a few possibilities, out of the thousands of potential combinations. - -#### Blueprints - -Silent Gear can be very simple or very complex. Make yourself a blueprint and then surround that blueprint with mats needed. For example, if you have a pickaxe blueprint, you will need the blueprint, handle and 3 ingots. The materials used and order matter very much! - -#### Beyond The Basics - -Check out these links for some additional information on material and additional guides. - -> [Material Spreadsheet](https://docs.google.com/spreadsheets/d/1CXiDr6wpaqoYj8WSSbb5R54LOnIETxXUOpf0JOSvo8Q) | -[General Silent Gear Info](https://docs.google.com/presentation/d/1g12uRqWyxuk-br5EsgTz3-RSfD2ym7VnS3jrXSESA2Q) | -[Early Game Tools](https://docs.google.com/presentation/d/1hGj6VCDAOu3F8WK9Pb8MGkv34tEypgRcBQvYljtp50M) | -[Late Mid Game Tools](https://docs.google.com/presentation/d/1uHk4XO1ZCiTMG46CgulAlhYiQ3NZ1_UcVLw7fVXdAZ4) | - -#### Custom Constructions - -??? Information "**Fireite Uru Paxel**" - ![paxel tooltip](img/sgear-paxel.png) - -??? Information "**Fireite Uru Katana**" - ![katana tooltip](img/sgear-katana.png) - -??? Information "**Fireite Uru Sword**" - ![sword tooltip](img/sgear-sword.png) - -??? Information "**Fireite Uru Machete**" - ![machete tooltip](img/sgear-machete.png) - -??? Information "**Fireite Uru Bow**" - ![bow tooltip](img/sgear-bow.png) - -??? Information "**Gem & Ingot**" - ![gem and ingot tooltip](img/sgear-gemingot.png) - -> Silent Gear | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/silent-gear) diff --git a/docs/atm6/sky/README.md b/docs/atm6/sky/README.md deleted file mode 100644 index 395adb8..0000000 --- a/docs/atm6/sky/README.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: All The Mods 6 - To The Sky -description: ATM6:TTS Guides ---- - -# ATM6 - To The Sky - -> All The Mods 6 - To The Sky | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-6-to-the-sky-atm6s) | [GitHub](https://github.com/AllTheMods/atm6-sky) diff --git a/docs/atm6/sky/dragons.md b/docs/atm6/sky/dragons.md deleted file mode 100644 index 3b781b4..0000000 --- a/docs/atm6/sky/dragons.md +++ /dev/null @@ -1 +0,0 @@ -# Dragons \ No newline at end of file diff --git a/docs/atm6/sky/faq.md b/docs/atm6/sky/faq.md deleted file mode 100644 index 68c41f5..0000000 --- a/docs/atm6/sky/faq.md +++ /dev/null @@ -1,9 +0,0 @@ -# F.A.Q - -| Question | Answer -| ------- | ---- -| **How do I get started?** | If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide. \ -| **Is there a list of mods?** | Yes, on [CurseForge](README.md) -| **Where can I find AllTheModium, Vibranium, & Unobtanium?** | Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book. -| **World Type** | `level-type=skyblockbuilder\:custom_skyblock` -| **Commands** (More on [Github](http://github.com/MelanX/SkyblockBuilder/blob/1.16.x/README.md)) | Create Island: `/skyblock create`, TP to Island: `/skyblock home`, TP to Spawn: `/skyblock spawn`. diff --git a/docs/atm6/woot.md b/docs/atm6/woot.md deleted file mode 100644 index 77e7df0..0000000 --- a/docs/atm6/woot.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Woot -description: ATM6 Woot Guide -authors: ---- - -# Woot - -![type:video](https://www.youtube.com/embed/5yqOCQgN1-o) - -> Woot | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/woot) diff --git a/docs/atm7/README.md b/docs/atm7/README.md deleted file mode 100644 index 795901d..0000000 --- a/docs/atm7/README.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: All The Mods 7 -description: ATM7 Intro Description ---- - -# All The Mods 7 - -[![](img/atm7Logo.jpg){.center}](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-7) - -![type:video](https://youtube.com/embed/cLJo6V2jcCo) -![type:video](https://youtube.com/embed/VlSdT6XMneI) - -> All The Mods 7 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-7) | [GitHub](https://github.com/AllTheMods/ATM-7) diff --git a/docs/atm7/lite/README.md b/docs/atm7/lite/README.md deleted file mode 100644 index b39ca7d..0000000 --- a/docs/atm7/lite/README.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: All The Mods 7 Lite -description: ATM7 Lite Intro Description ---- - -# All The Mods 7 - Lite - -[![](../img/atm7LiteLogo.png){.center}](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-7-lite-spark) - -All the Mods started out as a private pack for just a few friends of whatthedrunk's that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -With a selection of classic favourites and newly discovered mods, ATM7 Lite aims to have excellent performance on all machines whilst still being packed with content. - -For those with an itch to build an amazing factory, we have Create and Immersive Engineering for setting up complex systems that look great, Customize your weapons and tools using either Silent Gear or Tinkers Construct, or settle for looting some epic gear from the Apotheosis bosses that will spawn in your world, Found a Civilization with Minecolonies, Or perhaps a remote tower to privately plot your progression through Ars Magica Legacy, BloodMagic, or Mahou Tsukai? The choices are many, and more importantly, yours!! - -Recipe modification has been kept to a bare minimum, aiming to avoid recipe conflicts only. - -Does "All the Mods 7 Lite" really contain ALL THE MODS? No, of course not. This is a lite pack after all - -> All The Mods 7 - Lite | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-7-lite-spark) | [GitHub](https://github.com/AllTheMods/7lite) diff --git a/docs/atm7/sky/README.md b/docs/atm7/sky/README.md deleted file mode 100644 index 151744b..0000000 --- a/docs/atm7/sky/README.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: All The Mods 7 - To The Sky -description: ATM7-TTS Intro Description -authors: ---- - -# All The Mods 7 - To The Sky - -All the Mods 7 To the Sky is the sequel to the popular atm6 sky, we have taken feedback from the first iteration to make this pack the best we have to offer, adding in mods that were not in the first such as **Twilight Forest** and **Alchemistry**, followed by the mod **Ex Machinis**, an automation addon for **Ex Nihilo** built in house by ATM to take you from early, all the way to end game automated resources. - -All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -In All the Mods 7 To the Sky we will continue the tradition adding many new mods whilst keeping to the quality of the first modpack - -Does "All The Mods" really contain ALL THE MODS? No, of course not. - -![type:video](https://youtube.com/embed/m-ATQK81bOo) -![type:video](https://youtube.com/embed/b6vPh54Sdj0) -![type:video](https://youtube.com/embed/ZEhdzgieyqg) - -> All The Mods 7 - To The Sky | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-7-to-the-sky) | [GitHub](https://github.com/AllTheMods/All-the-mods-7-Sky) diff --git a/docs/atm8/.pages b/docs/atm8/.pages deleted file mode 100644 index bea6c58..0000000 --- a/docs/atm8/.pages +++ /dev/null @@ -1,3 +0,0 @@ -nav: - - README.md - - ... \ No newline at end of file diff --git a/docs/atm8/README.md b/docs/atm8/README.md deleted file mode 100644 index ae561c5..0000000 --- a/docs/atm8/README.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: All The Mods 8 -description: ATM8 Intro Description ---- - -# All The Mods 8 - -[![](img/atm8Logo.png){.center}](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-8) - -**All The Mods** started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -In **All the Mods 8** we will continue the tradition adding many new mods while going for more stability. - -Does "**All the Mods**" really contain **ALL THE MODS**? No, of course not. - -![type:video](https://youtube.com/embed/TuBvR6DeZs0) -![type:video](https://youtube.com/embed/LnMbb_Tzt-E) -![type:video](https://youtube.com/embed/tBPDE-yYPR8) - -> All The Mods 8 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-8) | [GitHub](https://github.com/AllTheMods/ATM-8/) diff --git a/docs/atm8/apotheosis.md b/docs/atm8/apotheosis.md deleted file mode 100644 index 9b352ab..0000000 --- a/docs/atm8/apotheosis.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Apotheosis -description: Apotheosis changes -authors: - - ArcTrooper - - C-ffeeStain ---- - -# Apotheosis - -## Starting Setup (JEI REQUIRED) - -### Requirements - -Recipes for the shelves in this guide **WILL NOT BE PROVIDED**. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with. - -### Seashelf Method - -To start, make 16 **Seashelf** and place down all but one in a formation like the one below. - -![](../atm9/img/apoth_seashelf1.png){.center} - -Once you've got those down, take your 16th **Seashelf** and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused **Seashelf** with your **Infused Seashelf**. Repeat this until all 16 `Seashelf` are `Infused Seashelf`. You will have 1 extra `Infused Seashelf` at the end. - -!!! info "You must be level 45+ to infuse Seashelves" - -After this, you'll need to break 9 **Infused Seashelf** and make 2 **Heart-Forged Seashelf** and 7 **Crystalline Seashelf**. Place these down where the original 9 were. - -Now, you will need to make 10 **Dormant Deepshelf** and infuse them to their **Deepshelf** varient. You should be able to infuse them with your current setup. - -!!! info "You must be level 60+ to infuse Dormant Deepshelves" - -After infusing all 10, make 5 **Soul-Touched Deepshelf** and 5 **Echoing Deepshelf**. Then, upgrade them to their **Sculkshelf** variant. *Press `U` or `right click` on the respective shelf in JEI to see what the recipe is to upgrade them.* - -Now you'll need to make 3 **Shelf of End-Fused Rectification**. This might require some work. - -You will also need to make 1 **Draconic Endshelf**. To make the **Infused Dragon's Breath**, place down the 10 **Sculkshelves** made earlier and add 10 **Melonshelf**. A setup for this can be seen below; the placement of the shelves does not have to be exact. - -!!! info "You must be level 80+ to infuse Dragon's Breath" - -![](../atm9/img/apoth_dragonsbreath.png){.center} - -After making the `Draconic Endshelf`, remove all the `Melonshelf`. Place the 3 **Shelf of End-Fused Rectification** and the **Draconic Endshelf** in a similar formation as shown in the `Seashelf` image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example. - -![](../atm9/img/apoth_finalsetup.png){.center} - ---- -## Infusion Setups - -You do not have to place the blocks exactly as I do, these are just an example. - -### Unbreakable Potion Charms - -!!! info "5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf" - -![](../atm9/img/apoth_charm.png){.center} - -### Superior Sigil of Socketing - -!!! info "5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf" - -![](../atm9/img/apoth_socketing.png){.center} - -### Tome of Superior Scrapping - -!!! info "3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf" - -![](../atm9/img/apoth_scrapping.png){.center} - -### Tome of Extraction - -!!! info "3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf" - -![](../atm9/img/apoth_extraction.png){.center} - -### Library of Alexandria - -!!! info "7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf" - -![](../atm9/img/apoth_library.png){.center} - -> Apotheosis | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/apotheosis) diff --git a/docs/atm8/mekanism.md b/docs/atm8/mekanism.md deleted file mode 100644 index 8649fec..0000000 --- a/docs/atm8/mekanism.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Mekanism -description: ATM8 Mekanism guides -authors: - - ArcTrooper ---- - -# Mekanism - -## AE2 Mekanism Infuser Auto-Crafting - -Using **ME Pattern Providers**, we can fully automate the **Metallurgic Infuser** (Left) and **Enrichment Chamber** (Right). This setup will only use 2 channels of your main network. - -??? abstract "Materials" - - [ ] 1x Metalluric Infuser (higher the level, the better) - - [ ] 1x Enrichment Chamber (higher, the better) - - [ ] 1x Quartz Fiber - - [ ] 8x AE2 Cables - - [ ] 2x ME Pattern Provider (Block form) - - [ ] 1x ME Interface (Panel form) - - [ ] 2x ME Storage Bus - - [ ] 8x Blank Patterns - -??? question "Do you have Refined Obsidian automated already?" - You can skip the **Obsidian Dust** filter on the left storage bus and the **Refined Obsidian Dust Pattern** and instead make a processing pattern to turn **Refined Obsidian Ingots** into **Refined Obsidian Dust** and put that in **Pattern Provider** connected to a **Crusher**. ---- -### Building and Configuring - -1. Put down your **Metallurgic Infuser** and place an **ME Storage Bus** on both sides of the infuser. -2. Place an **ME Pattern Provider** right behind the infuser and put an **ME Interface** on **top**, then place a **Quartz Fiber** on the side. -3. Place **7 AE2 cables** (Yellow in the example) connecting *all* AE2 devices. The orange cable connects to your main AE2 network. -![](../atm9/img/infuserBuildStep1.png){.center} - ---- - -3. Adjacent to the Infuser, place an **Enrichment Chamber** and a **Pattern Provider** behind it and place a cable connecting **both** pattern providers. -![](../atm9/img/infuserOverview.png){.center} -!!! warning "If you're using the same colored cables, place a **Cable Anchor** between them or use a different color." - -=== "Same Colored Cables" - - ![](../atm9/img/infuserBuildsStep2.png){.center} - -=== "Different Colored Cables" - - ![](../atm9/img/infuserBuildsStep2.1.png){.center} - ---- - -5. Set the **Infuser** & **Enrichment** inputs/outputs like the images below. -![](../atm9/img/infuserEnrichIO.png){.center width='500'} -!!! info "The **Infuser** will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the **Enrichment Chamber** will input/output the back (Purple)." -6. For the **ME Storage Buses** item filters have **Iron**, **Infused Alloy**, **Enriched Alloy**, and **Obsidian Dust** on the *left* side and **Enriched Redstone**, **Diamond**, and **Obsidian** on the *right*. -![](../atm9/img/infuserStorageBusConfig.png){.center width='650'} - ---- - -### Processing Patterns - -Now, we'll encode the **Processing Patterns**. These patterns are made so there will be a *(essentially)* 0% chance of clogging the Infuser due to leftover materials. -!!! danger "Make sure to set the patterns to **Process** (Furnace icon) instead of **Crafting** (Crafting Table icon)." - -=== "Infuser Patterns" - - - 8 Iron + 1 Enriched Redstone = 8 Infused Alloy - - 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy - - 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy - - 1 Obsidian = 4 Obsidian Dust - ![](../atm9/img/infuserPatterns.png){.center} - -=== "Enrichment Chamber Patterns" - - - 1 Redstone = 1 Enriched Redstone - - 1 Diamond = 1 Enriched Diamond - - 1 Refined Obsidian Dust = 1 Enriched Obsidian - - 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust - ![](../atm9/img/enrichmentPatterns.png){.center} - ---- - -Then you'll put patterns in each pattern provider as shown below. - -!!! warning "Make sure to give both machines power and to enabled `Auto-Split`." - -![](../atm9/img/infuserPatternProvider.png){.center} - -> Mekanism | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mekanism) diff --git a/docs/atm8/mysticalagriculture.md b/docs/atm8/mysticalagriculture.md deleted file mode 100644 index a285217..0000000 --- a/docs/atm8/mysticalagriculture.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Mystical Agriculture -description: ATM8 Mystical Agriculture guides -authors: - - ArcTrooper ---- - -# Mystical Agriculture - -## Farm Designs - -### AlfredGG's Farm - -![type:video](https://youtube.com/embed/iLSlFHweJsI) - -??? Question "My Watering Can/Scythe isn't working" - **Mystical Agriculture** doesn't allow fake players by default. The config can be changed in `config/mysticalagriculture-common.toml` -> `fakePlayerWatering = true`. - -??? Question "My Modular Routers aren't working" - You will need to add a **Security Upgrade** since you are working in a claimed chunk (even though it's yours) - -### KJM's Full-Auto Phytogenic Insolator with AE2 - -![Full setup using all 32 channels of a dense cable per wall](../atm9/img/phytoae2_1.png){.center} - -#### Requirements - -??? abstract "Minimum Building Materials" - - These materials set the ground work to build the full thing. - - [ ] 3x ME Interface - - [ ] 2x ME Storage Bus - - [ ] 2x Quartz Fiber or Cable Anchor - - [ ] 2x AE2 Crafting Card - - [ ] 2x Phytogenic Insolator - - [ ] 1x ME Controller - - [ ] 1x Pair of Quantum Rings - - [ ] 1x Sink/Eternal Water Block - - [ ] 1x of **any** colored cable *(Examples are using Magenta cables)* - - [ ] 2x of a **different** colored cable *(Examples are using Lime cables)* - - [ ] 8x of **another different** colored **Dense** cable *(Examples are using Orange dense cables)* - -??? abstract "All Building Materials" - - [ ] 129x ME Interfaces - - [ ] 2x ME Storage Bus - - [ ] 2x Quartz Fiber or Cable Anchor - - [ ] 128x AE2 Crafting Card - - [ ] 256x Phytogenic Insolator - - [ ] 1x ME Controller - - [ ] 1x Pair of Quantum Rings - - [ ] 1x Sink/Eternal Water Block - - [ ] 1x of **any** colored cable *(Examples are using Magenta cables)* - - [ ] 2x of a **different** colored cable *(Examples are using Lime cables)* - - [ ] 68x of **another different** colored **Dense** cable *(Examples are using Orange dense cables)* - -!!! info "Each image has a caption that shows when you click on it that you can read if you are stuck." - -!!! warning "This farm requires a general understanding of **AE2** and **Thermal Series**" - -#### The "Brain" - -First I'll show you how to build the "brain" of those whole system. You can place it above everything (like in the image above) or underneath the floor. - -1. Place a **Sink/Eternal Water Block** and an **ME Interface** on the corners of a **Quantum Ring** and then place **2x Quartz Fibers/Cable Anchors** between the Sink and ME Interface and on the center of the Quantum Ring. -2. Then place your **2x colored cables** (Lime cables) on top of them along with an **ME Controller**. -3. The **1x colored cable** (Magenta cable) should connect the quantum ring and the ME Interface. - -* Make sure to link your Quantum Rings. - -![Make sure to put quartz fiber or cable anchors to isolate the Lime cable from your home AE2 system](../atm9/img/phytoae2brain_1.png){.center} - -4. Place **2x ME Storage Bus** on the ME Interface and Sink, facing each other. - -![ME Storage Bus on both the Sink and ME Interface](../atm9/img/phytoae2brain_2.png){.center} - -5. Have the **ME Interface** stock **Water** and **Phyto-Gro** and set the priority to **-1**. -![ME Interface settings](../atm9/img/phytoae2brain_interfacesettings.png){.center} - -6. For the **ME Storage Bus on the Sink** settings, have the **Input/Output Mode** to **Extract Only** and put **Water** in the filter by dragging it from JEI. -![Storage Bus on sink settings](../atm9/img/phytoae2brain_sinkbus.png){.center width='489' height='253'} - ---- - -#### The Modules - -Now we'll build one of the "modules" that make up the entire thing. Each column of Phyto/Interface pairs is **8 blocks tall** since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable. - -1. Each module consists of **2 Phytos** next to each other and an **ME Interface** on each side. -![](../atm9/img/phytoae2_module.png){.center} - -1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90° to one side depending on which corner it's on. -![](../atm9/img/phytoae2_modulecorner.png){.center} - -2. For the **ME Interface**, put a **Crafting Card** in and set **Water** and **Phyto-Gro** in the filter by dragging it from JEI. -![](../atm9/img/phytoae2_cardandfilter.png){.center} - -3. For the Phytos it'll be slightly different depending on which side the ME Interface is on. You will have it **Auto Input/Output** the side touching the interface. The image below is for a phyto with an interface to the left. -![](../atm9/img/phytoae2_phytosettings.png){.center} - -4. Each Phyto will have **1x Draconic Integral Component & 3x Twinite Flux Linkages**. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these. -![](../atm9/img/phytoae2_phytoaugs.png){.center} - -??? Question "Why not use Shellite instead of Twinite? KJM explains" - The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component. - -You'll stack these modules to a **maximum of 8 tall** and arrange them into 4 walls. - -???+ tip "Tips" - - Use an AE2 **Memory Card** to copy **ME Interface** settings (`Shift + R-Click` to **Copy**, `R-Click` to **Paste**) - - Use **Redprint** to copy **Phytogenic Insolator** settings (`R-Click` to **Copy** and to **Paste**) - ---- - -#### Connecting and Powering - -You'll put your **Colored Dense Cables** in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos. -![](..//atm9/img/phytoae2_energy.png){.center} - -> Mystical Agriculture | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mystical-agriculture) diff --git a/docs/atm9/.pages b/docs/atm9/.pages deleted file mode 100644 index 007258d..0000000 --- a/docs/atm9/.pages +++ /dev/null @@ -1,4 +0,0 @@ -nav: - - README.md - - FAQ: faq.md - - ... \ No newline at end of file diff --git a/docs/atm9/README.md b/docs/atm9/README.md deleted file mode 100644 index 9ac2a43..0000000 --- a/docs/atm9/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: All The Mods 9 -description: ATM9 Intro Description ---- - -# All The Mods 9 - -[![](img/atm9Logo.png){.center}](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-9) - -**All The Mods** started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -In **All the Mods 9** we will continue the tradition adding many new mods while going for more stability. - -Does "**All the Mods**" really contain **ALL THE MODS**? No, of course not. - -We use a few versions of **[Complementary Shaders](https://www.complementary.dev/shaders/)** and if there are any issues with them that all falls on us for using them in our pack. If you want to learn more about them please check them out on their [website](https://www.complementary.dev). - -![type:video](https://youtube.com/embed/uGO90Cg7M2k) -![type:video](https://youtube.com/embed/S4zy6qQWq8U) -![type:video](https://youtube.com/embed/pugmsBEagBk) - -> All The Mods 9 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-9) | [GitHub](https://github.com/AllTheMods/ATM-9) diff --git a/docs/atm9/allthemodium.md b/docs/atm9/allthemodium.md deleted file mode 100644 index 5157682..0000000 --- a/docs/atm9/allthemodium.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: AllTheModium -description: AllTheModium Documentation -authors: ---- - -# AllTheModium - -In **ATM9**, All The Modium has changed in ways different from previous packs. We'll explain where to find, how to obtain, and how **Templates** works to craft armor & tools! - -### Where & How - -**AllTheModium** ores can be found across 3 dimensions: **Overworld**, **Nether**, and **The End**, normally exposed to **AIR**. - -- **AllTheModium**: (Overworld) ![](img/allthemodium_ore.gif){.absolute style='margin-left:5px'} ![](img/allthemodium_ingot.png){.absolute style='margin-left:45px'} - - Found in [Deep Dark](https://minecraft.wiki/w/Deep_Dark) Biome, also in **Mining Dimension** Deep Slate layer (Y 65-129). - - **Mining Dimension** is more rare, at-least 1 ore per chunk. - - Killing **Warden** also grants a Quest reward ATM Ingot. - - Obtained with a **Netherite** level pick or better. -- **Vibranium**: (Nether) ![](img/vibranium_ore.gif){.absolute style='margin-left:5px'} ![](img/vibranium_ingot.png){.absolute style='margin-left:45px'} - - Found in **Nether** dimension (no longer biome specific). - - Elevation between Y 64-127 - - Also Found between Y 0-40 within **The Other** dimension. - - Obtained with an **AllTheModium** level pick or better. -- **Unobtainium**: (End) ![](img/unobtainium_ore.gif){.absolute style='margin-left:5px'} ![](img/unobtainium_ingot.png){.absolute style='margin-left:45px'} - - Found within **End Highlands**. - - More rare than other ores - - Obtained with **Vibranium** level pick or better - -!!! Warning "Ores Can Only Be Mined By A 'Real Player'" - -### Templates - -- **AllTheModium**: ![](img/allthemodium_upgrade_smithing_template.png){.absolute style='margin-left:5px'} - - Found in **Sus Clay** in **Ancient Cities** within the **Overworld**. - -![](https://media.discordapp.net/attachments/1118377751976624149/1155274362312724560/image.png){width='300px'} - -- **Vibranium**: ![](img/vibranium_upgrade_smithing_template.png){.absolute style='margin-left:5px'} - - Found in **Sus SoulSand** in **Bastions** within the **Nether**. - -![](https://images-ext-1.discordapp.net/external/YMZ4-Dl6Ot_zE9sQKVDw0ZV1Dm991WxKcjVudPV2IjU/https/i.imgur.com/Yoyyxcg.png){width='300px'} - -- **Unobtainium**: ![](img/unobtainium_upgrade_smithing_template.png){.absolute style='margin-left:5px'} - - Found in **The Other** dimension, as chest loot in the underground library of `allthemodium:dungeon` structure. - -## Smithing Recipe Example -| Template | Armor | Ingot | Output | -| :------: | :---: | :---: | :----: | -| ![](img/netherite_upgrade_smithing_template.png) | ![](img/diamond_chestplate.png) | ![](img/netherite_ingot.png) | ![](img/netherite_chestplate.png) -| ![](img/allthemodium_upgrade_smithing_template.png) | ![](img/netherite_chestplate.png) | ![](img/allthemodium_ingot.png) | ![](img/allthemodium_chestplate.png) -| ![](img/vibranium_upgrade_smithing_template.png) | ![](img/allthemodium_chestplate.png) | ![](img/vibranium_ingot.png) | ![](img/vibranium_chestplate.png) -| ![](img/unobtainium_upgrade_smithing_template.png) | ![](img/vibranium_chestplate.png) | ![](img/unobtainium_ingot.png) | ![](img/unobtainium_chestplate.png) diff --git a/docs/atm9/apotheosis.md b/docs/atm9/apotheosis.md deleted file mode 100644 index 0e15796..0000000 --- a/docs/atm9/apotheosis.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Apotheosis -description: Apotheosis guides and changes -authors: - - AlfredGG - - ArcTrooper - - C-ffeeStain ---- - -# Apotheosis - -## Kaimonick's Apotheosis Overview - -[Click here to view Kai's guide!](../guides/kaimonickguides.md/#apotheosis) - -## Starting Enchanting Setup - -### Requirements - -Recipes for the shelves in this guide **WILL NOT BE PROVIDED**. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with. - -### Seashelf Method - -To start, make 16 **Seashelf** and place down all but one in a formation like the one below. - -![](img/apoth_seashelf1.png){.center} - -Once you've got those down, take your 16th **Seashelf** and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused **Seashelf** with your **Infused Seashelf**. Repeat this until all 16 `Seashelf` are `Infused Seashelf`. You will have 1 extra `Infused Seashelf` at the end. - -!!! info "You must be level 45+ to infuse Seashelves" - -After this, you'll need to break 9 **Infused Seashelf** and make 2 **Heart-Forged Seashelf** and 7 **Crystalline Seashelf**. Place these down where the original 9 were. - -Now, you will need to make 10 **Dormant Deepshelf** and infuse them to their **Deepshelf** varient. You should be able to infuse them with your current setup. - -!!! info "You must be level 60+ to infuse Dormant Deepshelves" - -After infusing all 10, make 5 **Soul-Touched Deepshelf** and 5 **Echoing Deepshelf**. Then, upgrade them to their **Sculkshelf** variant. *Press `U` or `right click` on the respective shelf in JEI to see what the recipe is to upgrade them.* - -Now you'll need to make 3 **Shelf of End-Fused Rectification**. This might require some work. - -You will also need to make 1 **Draconic Endshelf**. To make the **Infused Dragon's Breath**, place down the 10 **Sculkshelves** made earlier and add 10 **Melonshelf**. A setup for this can be seen below; the placement of the shelves does not have to be exact. - -!!! info "You must be level 80+ to infuse Dragon's Breath" - -![](img/apoth_dragonsbreath.png){.center} - -After making the `Draconic Endshelf`, remove all the `Melonshelf`. Place the 3 **Shelf of End-Fused Rectification** and the **Draconic Endshelf** in a similar formation as shown in the `Seashelf` image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example. - -![](img/apoth_finalsetup.png){.center} - ---- -## Infusion Setups - -You do not have to place the blocks exactly as I do, these are just an example. - -### Unbreakable Potion Charms - -!!! info "5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf" - -![](img/apoth_charm.png){.center} - -### Superior Sigil of Socketing - -!!! info "5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf" - -![](img/apoth_socketing.png){.center} - -### Tome of Superior Scrapping - -!!! info "3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf" - -![](img/apoth_scrapping.png){.center} - -### Tome of Extraction - -!!! info "3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf" - -![](img/apoth_extraction.png){.center} - -### Library of Alexandria - -!!! info "7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf" - -![](img/apoth_library.png){.center} - ---- -## Infused Teleportation Core Setups - -Below are the setups to make each infused teleportation core that are needed for the **ATM Star**. Each setup has 2 variants, one that only uses shelves from the [max enchanting setup](#starting-enchanting-setup) and one that use other shelves to get the same result. Use whichever is easiest for you. - -### Nether - -=== "Max Enchanting Shelves" - - !!! info "10x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf" - ![](img/apoth_netherInfusionMax.png){.center} - -=== "Alternative Shelves" - - !!! info "8x Glowing Hellshelf, 8x Hellshelf, 3x Melonshelf, 2x Echoing Deepshelf, 1x Draconic Endshelf" - ![](img/apoth_netherInfusion.png){.center} - -### Ender - -=== "Max Enchanting Shelves" - - !!! info "4x Draconic Endshelf, 3x Melonshelf, 2x Echoing sculkshelf, 1x Soul-Touched Sculkshelf" - ![](img/apoth_enderInfusionMax.png){.center} - -=== "Alternative Shelves" - - !!! info "4x Draconic Endshelf, 2x Echoing Deepshelf, 2x Glowing Hellshelf, 2x Infused Seashelf, 1x Stoneshelf, 1x Melonshelf" - ![](img/apoth_enderInfusion.png){.center} - -### Draconic - -=== "Max Enchanting Shelves" - - !!! info "7x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf, 1x Draconic Endshelf" - ![](img/apoth_draconicInfusionMax.png){.center} - -=== "Alternative Shelves" - - !!! info "8x Deepshelf, 4x Echoing Deepshelf, 2x Draconic Endshelf, 1x Melonshelf, 1x Oak Bookshelf" - ![](img/apoth_draconicInfusion.png){.center} - ---- -## Spawner Changes - -- **Remove AI**: {~~Chorus Fruit ~> Golden Apple ~~} -- **Ignore Players**: {~~Nether Star ~> Conduit ~~} -- **Increase Entities**: Ghast Tears | Max {~~ 32 ~> 16 ~~} -- **Increase Spawn Count**: {~~Fermented Spider's Eye ~> Piglich Heart~~} | Max {~~ 16 ~> 8 ~~} -- **Decrease Minimum Spawn Delay**: {~~ Sugar ~> AllTheModium Ingot ~~} | Min {~~ 20 ~> 100 ~~} -- **Decrease Maximum Spawn Delay**: {~~ Clock ~> Unobtainium Ingot ~~} | Min {~~ 20 ~> 100 ~~} - -The aim of these changes are to make removing **AI** easier, give **Conduits** more of a use, encourage people to look out for good spawners in the world, and bring spawners more in line with the other options available for farming mob drops, like **Hostile Neural Networks** or **Mystical Agriculture** or **Productive Bees** WannaBee mob farms. - -> Apotheosis | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/apotheosis) diff --git a/docs/atm9/extremereactors.md b/docs/atm9/extremereactors.md deleted file mode 100644 index a3a9eb2..0000000 --- a/docs/atm9/extremereactors.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Extreme Reactors -description: Exteme Reactors Changes -authors: - - AlfredGG ---- - -# Extreme Reactors - -**Extreme Reactors** is a custom sized multi-block reactor for power generation, similar to [Bigger Reactor](https://legacy.curseforge.com/minecraft/mc-mods/biggerreactors) & [Big Reactor](https://legacy.curseforge.com/minecraft/mc-mods/big-reactors). - -### Setups and Sizes - -|Object|Max Height (Y)|Max Size (X/Z)| -|---|---|---| -|Basic Reactor|5|5| -|Hardened Reactor|48|32| -|Turbine|32|32| -|Fluidizer|16|16| - -**FunshineX** has made a very detailed video going over all the different sizes of reactors, efficiencies, placement of moderators, and turbine setups. Your RF/t numbers will be higher than his numbers in the video due to the **Power Gen Changes** mentioned above. -![type:video](https://youtube.com/embed/dVdZJsvWuQk) - -Some additional information regarding other aspects on how the turbines work and other tips specific to ATM. - -!!! quote "**Disastrous_Site_6352** [via Reddit](https://www.reddit.com/r/allthemods/comments/15ih6ug/comment/juw8es4/)" - - Wider is more efficient than taller for fuel. - - The most efficient setup for rods is a checkerboard pattern with three spaces between the outermost rod and the interior wall. Heat manifolds placed on the interior walls of the reactor also in a checkerboard pattern in the cardinal directions of any rods (North, South, East, West). - - Passive cooled reactors generate rf, active cooled with water produces steam for turbines. You will need to run passive for a while to produce cyanite for blutonium to make turbines. - - One actively cooled reactor can produce enough steam for several turbines. - - Liquid sodium from [Mekanism](mekanism.md) can be used to actively cool the reactor, making superheated liquid sodium then pumping it into a heat exchanger to produce even more steam powers even more turbines. - - Heat exchanger setup isn't really necessary in atm because of other more efficient setups for power. It's much like creating 5x ore processing in a modpack with mystical agriculture, fun but overkill. - ---- - -### Moderators - -| Moderator | FE/t | % of top | μB/t | -| --------- | ---- | -------- | ---- | -| Air | 13,406 | 91.23% | 198 | -| Dry Ice | 13,525 | 92.06% | 198 | -| Iron | 13,862 | 94.34% | 190 | -| Manasteel | 13,912 | 94.68% | 191 | -| Lead | 14,277 | 97.16% | 187 | -| Graphite | 14,342 | 97.60% | 182 | -| Tangerium | 14,422 | 98.15% | 184 | -| Electrum | 14,466 | 98.45% | 187 | -| Emerald | 14,475 | 98.51% | 184 | -| Cryomisi | 14,502 | 98.69% | 186 | -| Elementium| 14,527 | 98.86% | 185 | -| Diamond | 14,573 | 99.18% | 184 | -| Terrasteel| 14,625 | 99.53% | 185 | -| Netherite | 14,629 | 99.56% | 183 | -| Redfrigium| 14,694 | 100.00% | 181 | - ---- - -### Computer Craft Integration - -You can use **Computer Craft** with scripts such as [Kasra-G's Automated Reactor Controller](https://github.com/Kasra-G/ReactorController) to easily automate your reactor with the **Reactor Computer Port**. There are other Computer Craft scripts that will integrate with Extreme Reactor Turbines as well. - -??? Note "You must enable HTTP API for Computer Craft Integration" - To pull the script above as outlined in the repo's instructions, you must edit the following file:
- `/YOURWORLDNAME/defaultconfigs/computercraft-server.toml` - - Search for `http` and make sure it is set to `enabled = true` as shown below. - ``` toml title="computercraft-server.toml" - [http] - #Enable the "http" API on Computers. Disabling this also disables the "pastebin" and - #"wget" programs, that many users rely on. It's recommended to leave this on and use - #the "rules" config option to impose more fine-grained control. - enabled = true - ``` - - Your server *must* be **off** when changing this file. If you edit it while it is running, the changes will not apply. - -![](img/extreme_reactors_cc_kasrag.jpg) - ---- - -### Power Gen Changes - -**Overall Power Gen:** {~~ 1x ~> 3x ~~} | 53 can produce ~15k RF/t - -> Extreme Reactors | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/extreme-reactors) diff --git a/docs/atm9/faq.md b/docs/atm9/faq.md deleted file mode 100644 index f00e219..0000000 --- a/docs/atm9/faq.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: ATM9 FAQ -description: ATM9 Frequently Asked Questions -authors: ---- - -# FAQ - -**All The Mods 9** Frequently Asked Questions - ---- - -???+ Abstract "Gameplay FAQs" - ??? Question "Why can't I use modular router and watering can?" - By default, **Mystical Agriculture** does not allow fake players to automate watering cans. If you dislike this change, it can be changed within `config/mysticalagriculture-common.toml` > `fakePlayerWatering = true`. - - ??? Question "Do I need to chunkload all the chunks my Chunk Destroyer is going to mine?" - You do *not* need to load chunks you're mining. You only need to chunkload the chunk the **Chunk Destroyer** is in. - - ??? Question "How do I remove enchants from a book/weapon?" - - Drop an anvil onto **Obsidian** with the enchanted book/weapon along with **Books** for each separate enchantment (EX: You have a book with 3 different enchants, you'd need 3 books to split those enchants). - - Enchant the anvil with **Splitting** (Only splits books/weapons with 1 enchant) or **Obliteration** (Splits any number of enchants) - - Use the **Enchantment Extractor** from Industrial Foregoing. Provide it with **Books** and **Power**, and it will extract each enchantment on all enchanted items/books to singular books. It can also be configured to push extracted enchantments into the **Enchantment Library** from Apotheosis. - - ??? Question "What's the little 3D cube next to my crosshair?" - It's from Quark, the default keybind to toggle it is ++k++. - - ??? Question "How do I find '`insert name`' biome?" - **Nature's Compass** is a really nice tool to find any and all biomes in the modpack. Craft it, right click with it in your hand, and you can run the search for any biome you are looking for (such as the Deep Dark). - - ??? Question "How do I change `/home`, `/tpa` etc cooldown?" - To change the behavior of `/home` or to re-enable `/back` and `/rtp`, edit `saves/worldName/serverconfig/ftb-essentials.snbt`. **The world/server has to be stopped for the changes to take effect.** - - ??? Question "Why is flight disabled?" - Flight is disabled in certain dimensions (**The Other**, **Blue Skies**, and **Twilight Forest**), to add more difficulty towards progression. If you dislike this change, it can be disabled in `worldName/serverconfig/noflyzone.snbt` - -???+ Warning "Technical FAQs" - ??? Question "I can't complete '`name of quest`' even though I fufilled the requirements?" - You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it's progress if you still have the items. - - ??? Question "I have my chunks force loaded, but they don't run when I'm logged off." - 1. Press ++m++ to open the map. - 2. Press ++ctrl+s++ to open the server settings (requires OP). - 3. Change `Forceloading Mode` to `always`. - - ??? Question "What's the difference between ATM9 and ATM9: No Frills?" - [Here is a comparison](https://www.modpackindex.com/modpacks/compare?modpacks=64056,74905) - - ??? Question "Why isn't '`insert name`' mod in ATM9 yet?" - ATM packs does not literally contain "All The Mods". Our main focus is having mods that's not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version **1.20.1**, and **Forge** (Not NeoForge), you may make a [suggestion](https://github.com/AllTheMods/ATM-9/issues/1). - - ??? Question "I found a bug/dupe in the pack. How can I report it?" - To report bugs, dupes or similar, head over to the [ATM9 GitHub](https://github.com/AllTheMods/ATM-9/issues) and open a new issue describing the occurrence. - - ??? Question "What are the recommended Java arguments for this pack?" - - **Client arguments**: send `?args` in the **#bot-spam** channel in our [Discord](https://discord.com/invite/allthemods). - - **Server arguments**: send `?svargs` in the **#bot=spam** channel in our [Discord](https://discord.com/invite/allthemods). - - ??? Question "Why does my game crash while launching?" - Lack of RAM most likely. Send `?allocate` in the **#bot-spam** channel in our [Discord](https://discord.com/invite/allthemods) to learn how to allocate more RAM. If that's not the problem, head to **#atm9-techsupport** and send `?logs` to see how to upload your crash/latest log. - - ??? Question "I crashed and got `Error code 1`, please help" - `Exit code 1` is a generic error from Minecraft. It is no different than "game didn't load, no longer attempting to load. Please refer to the output error log created by your launcher" if you are unsure... please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our [Discord](https://discord.com/invite/allthemods). Try running `?logs` instead. - - ??? Question "I'm having issues connecting to a LAN/Essentials world" - To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these. diff --git a/docs/atm9/generatorgalore.md b/docs/atm9/generatorgalore.md deleted file mode 100644 index a377957..0000000 --- a/docs/atm9/generatorgalore.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Generator Galore -description: Generator Galore changes -authors: - - AlfredGG ---- - -# Generator Galore - -### Power Gen Changes - -???+ Info "Basic Generators" - - | Generator | Change - | --------- | ------- - | Copper | {~~ 8 ~> 20 ~~} RF/t - | Iron | {~~ 16 ~> 40 ~~} RF/t - | Gold | {~~ 32 ~> 80 ~~} RF/t - | Diamond | {~~ 64 ~> 160 ~~} RF/t - | Obsidian | {~~ 128 ~> 200 ~~} RF/t - | Emerald | {~~ 256 ~> 300 ~~} RF/t - | Netherite | {~~ 256 ~> 500 ~~} RF/t - -???+ Info "Special Generators" - - | Generator | Change | Notes | - | --------- | ------- | ------- | - | **Enchantment** | {~~ 40 ~> 500 ~~} RF/t | - | **Magmatic** | {~~ 40 ~> 150 ~~} RF/t | - | **Ender** | {~~ 40/80 ~> 300/500 ~~} RF/t | **Ender Pearl** or **Eye of Ender** -> {~~ 300 ~> 500 ~~} RF/t. - | **Culinary** | {~~ 8 ~> 10 ~~} RF/t | **ATM Carrot** currently generates 320 RF/t. This would make it 400 RF/t per carrot, which is fair. - | **Halitosis** | {~~ 40 ~> 1k ~~} RF/t | Only way to automate **Dragon's Breath** is HNN. Nerf overall RF given from {~~ 480k ~> 200k ~~}. - | **NetherStar** | {~~ 4k ~> 10k ~~}RF/t | Tons of Nether Stars are needed for the star, so choosing this gen should be worth it. - -> Generator Galore | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/generatorgalore) diff --git a/docs/atm9/gregtech.md b/docs/atm9/gregtech.md deleted file mode 100644 index ea6ffa2..0000000 --- a/docs/atm9/gregtech.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: GregTech -description: -authors: ---- - -# GregTechCEu Modern - - -> GregTechCEu Modern | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/gregtechceu-modern/files) diff --git a/docs/atm9/mahoutsukai.md b/docs/atm9/mahoutsukai.md deleted file mode 100644 index 2a00937..0000000 --- a/docs/atm9/mahoutsukai.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Mahou Tsukai -description: Mahou Tsukai changes -authors: ---- - -# Mahou Tsukai - -**Mahou Tsukai** is a magic mod focused mainly on spell uniqueness and special effects, instead of focusing on how spells are created, as many magic mods do. Many of the spells are based on similar concepts in Fate/Stay Night and other media, but knowledge of these media are not at all necessary to understand and enjoy the mod. - -## ATM9 Mahou Changes - -- **Innate Cap** is set to a maximum of 5000. -- Increasing **Innate Cap** requires throwing **Ender Upgrade Orbs** (26 max) in Mahou lake along with **Caliburn** in a _single throw_. -- Converting **Caliburn** to **Morgan** requires killing the **Warden** with **Caliburn**. - -!!! note "" - You must throw Caliburn into the lake with all Ender Upgrade Orbs you plan to use at the same time in a single throw. You only have one chance to increase the Innate Cap. - If for example you only throw 10 Ender Upgrade Orbs and Caliburn into the lake, then later throw 16 (for a total of 26) in the lake with Caliburn it will not accept the remaining 16 Ender Upgrade Orbs. If this happens you need to make a new Caliburn. - - -> Mahou Tsukai | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mahou-tsukai) diff --git a/docs/atm9/mekanism.md b/docs/atm9/mekanism.md deleted file mode 100644 index df31a12..0000000 --- a/docs/atm9/mekanism.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Mekanism -description: ATM9 Mekanism guides and changes -authors: - - AlfredGG - - ArcTrooper ---- - -# Mekanism - -### Power Gen Changes - -#### Buffed - | Generator | Change | Notes | - | --------- | ------ | ----- | - | **Bio Generator** | {~~ 280 ~> 500 ~~} RF/t | Makes it more of an option instead of straight out using **GBG**. - -#### Nerfed - | Generator | Change | Notes | - | --------- | ------ | ----- | - | **GBG Ethylene** | {~~ 78K ~> ~8.5k ~~} RF/t | *Super nerfed* but promotes good setups. - -!!! warning "Higher burn rate = more melons needed for setup." -!!! info "Recipe has been made harder for the **GBG**." - -*[GBG]: Gas Burning Generator - ---- - -## AE2 Mekanism Infuser Auto-Crafting - -Using **ME Pattern Providers**, we can fully automate the **Metallurgic Infuser** and **Enrichment Chamber**. This setup will only use 2 channels of your main network. - -??? abstract "Materials" - - [ ] 1x Metalluric Infuser (higher the level, the better) - - [ ] 1x Enrichment Chamber (higher, the better) - - [ ] 1x Quartz Fiber - - [ ] 8x AE2 Cables - - [ ] 2x ME Pattern Provider (Block form) - - [ ] 1x ME Interface (Panel form) - - [ ] 2x ME Storage Bus - - [ ] 8x Blank Patterns - -??? question "Do you have Refined Obsidian automated already?" - You can skip the **Obsidian Dust** filter on the left storage bus and the **Refined Obsidian Dust Pattern** and instead make a processing pattern to turn **Refined Obsidian Ingots** into **Refined Obsidian Dust** and put that in a **Pattern Provider** connected to a **Crusher**. ---- -### Building and Configuring - -1. Put down your **Metallurgic Infuser** and place an **ME Storage Bus** on both sides of the infuser. -2. Place an **ME Pattern Provider** right behind the infuser and put an **ME Interface** on **top**, then place a **Quartz Fiber** on the side. -3. Place **7 AE2 cables** (Yellow in the example) connecting *all* AE2 devices. The orange cable connects to your main AE2 network. -![](img/infuserBuildStep1.png){.center} - ---- - -3. Adjacent to the **Infuser**, place an **Enrichment Chamber** and a **Pattern Provider** behind it and place a cable connecting **both** pattern providers. -![](img/infuserOverview.png){.center} -!!! warning "If you're using the same colored cables, place a **Cable Anchor** between them or use a different color." - -=== "Same Colored Cables" - - ![](img/infuserBuildsStep2.png){.center} - -=== "Different Colored Cables" - - ![](img/infuserBuildsStep2.1.png){.center} - ---- - -5. Set the **Infuser** & **Enrichment** inputs/outputs like the images below. -![](img/infuserEnrichIO.png){.center width='500'} -!!! info "The **Infuser** will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the **Enrichment Chamber** will input/output the back (Purple)." -6. For the **ME Storage Buses** item filters have **Iron**, **Infused Alloy**, **Enriched Alloy**, and **Obsidian Dust** on the *left* side and **Enriched Redstone**, **Diamond**, and **Obsidian** on the *right*. -![](img/infuserStorageBusConfig.png){.center width='650'} - ---- - -### Processing Patterns - -Now, we'll encode the **Processing Patterns**. These patterns are made so there will be a *(essentially)* 0% chance of clogging the Infuser due to leftover materials. -!!! danger "Make sure to set the patterns to **Process** (Furnace icon) instead of **Crafting** (Crafting Table icon)." - -=== "Infuser Patterns" - - - 8 Iron + 1 Enriched Redstone = 8 Infused Alloy - - 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy - - 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy - - 1 Obsidian = 4 Obsidian Dust - ![](img/infuserPatterns.png){.center} - -=== "Enrichment Chamber Patterns" - - - 1 Redstone = 1 Enriched Redstone - - 1 Diamond = 1 Enriched Diamond - - 1 Refined Obsidian Dust = 1 Enriched Obsidian - - 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust - ![](img/enrichmentPatterns.png){.center} - ---- - -Then you'll put patterns in each pattern provider as shown below. - -![](img/infuserPatternProvider.png){.center} - -!!! warning "Make sure to give both machines power and to enabled `Auto-Split`." - ---- - -## Fission Reactor Temp Calculation - -**Big shoutout to Kayla for these equations! Go check out her [CC Mek SCADA on GitHub!](https://github.com/MikaylaFischler/cc-mek-scada/wiki)** - -Use the equation below to estimate how hot your reactor will get at a specific burn rate for either water or sodium coolant. *Remember the reactor starts taking damage at >1200K!* - - -**Water**: `burn_rate(1)` \* 2 \* \[1,000,000 \* (`heat_capacity`-1)\] + 373.15 -{.annotate} - -1. in mB - -**Sodium**: `burn_rate(1)` \* \[1,000,000 \* (`heat_capacity`-1)\] + 373.15 -{.annotate} - -1. in mB - -???+ question "How do I calculate `heat_capacity`?" - `heat_capacity` is joules per kelvin based on the physical size of the reactor, by default thats 1000x the amount of 'casing' which includes reactor glass, casing, valves, etc. - - \- Kayla - -`heat_capacity` = (2 \* W2) + \[(H-2) \* (W2 -(W-2)2)\] \* 1000 - -!!! info "W and H are the Width and Height of Fission Reactor respectively" - -[Full Explanation of Kayla's Calculations](https://github.com/MikaylaFischler/cc-mek-scada/wiki/Reactor-Temperature-Calculation) - ---- - -> Mekanism | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mekanism) diff --git a/docs/atm9/mobgrindingutils.md b/docs/atm9/mobgrindingutils.md deleted file mode 100644 index d4d7f80..0000000 --- a/docs/atm9/mobgrindingutils.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Mob Grinding Utils -description: Mob Grinding Utils changes -authors: ---- - -# Mob Grinding Utils - -## Recipe Changes - -The **Looting** upgrade for the **Mob Masher** has been changed. Originally, it required redstone dust, 4 blue dye, and 4 gold nuggets. - -It is mostly the same, but instead of redstone dust it now uses an actual Enchanted Book with **Looting** (any level). - -> Mob Grinding Utils | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mob-grinding-utils) diff --git a/docs/atm9/mysticalagriculture.md b/docs/atm9/mysticalagriculture.md deleted file mode 100644 index e5472cd..0000000 --- a/docs/atm9/mysticalagriculture.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Mystical Agriculture -description: ATM9 Mystical Agriculture changes and guides -authors: - - ArcTrooper ---- - -# Mystical Agriculture - -## Infusion Changes - -ATM9 adds **Mystical Agriculture Tiered Crystals** which, as the name suggests, adds tiered crystals. You must use a crystal of the same tier to upgrade to the next one (EX: You have to use an **Imperium Crystal** to craft **Supremium Essence**). - -- **Master Infusion Crystals** now requires 4 {~~Supremium~>Insanium~~}. - ---- - -## Farm Designs - -### AlfredGG's Farm - -![type:video](https://youtube.com/embed/iLSlFHweJsI) - -??? Question "My Watering Can/Scythe isn't working" - **Mystical Agriculture** doesn't allow fake players by default. The config can be changed in `config/mysticalagriculture-common.toml` -> `fakePlayerWatering = true`. - -??? Question "My Modular Routers aren't working" - You will need to add a **Security Upgrade** since you are working in a claimed chunk (even though it's yours) - -### KJM's Full-Auto Phytogenic Insolator with AE2 - -![Full setup using all 32 channels of a dense cable per wall](img/phytoae2_1.png){.center} - -#### Requirements - -??? abstract "Minimum Building Materials" - - These materials set the ground work to build the full thing. - - [ ] 3x ME Interface - - [ ] 2x ME Storage Bus - - [ ] 2x Quartz Fiber or Cable Anchor - - [ ] 2x AE2 Crafting Card - - [ ] 2x Phytogenic Insolator - - [ ] 1x ME Controller - - [ ] 1x Pair of Quantum Rings - - [ ] 1x Sink/Eternal Water Block - - [ ] 1x of **any** colored cable *(Examples are using Magenta cables)* - - [ ] 2x of a **different** colored cable *(Examples are using Lime cables)* - - [ ] 8x of **another different** colored **Dense** cable *(Examples are using Orange dense cables)* - -??? abstract "All Building Materials" - - [ ] 129x ME Interfaces - - [ ] 2x ME Storage Bus - - [ ] 2x Quartz Fiber or Cable Anchor - - [ ] 128x AE2 Crafting Card - - [ ] 256x Phytogenic Insolator - - [ ] 1x ME Controller - - [ ] 1x Pair of Quantum Rings - - [ ] 1x Sink/Eternal Water Block - - [ ] 1x of **any** colored cable *(Examples are using Magenta cables)* - - [ ] 2x of a **different** colored cable *(Examples are using Lime cables)* - - [ ] 68x of **another different** colored **Dense** cable *(Examples are using Orange dense cables)* - -!!! info "Each image has a caption that shows when you click on it that you can read if you are stuck." - -!!! warning "This farm requires a general understanding of **AE2** and **Thermal Series**" - -[Click here to view Kai's AE2 guide!](../guides/kaimonickguides.md/#apotheosis) - - - -#### The "Brain" - -First I'll show you how to build the "brain" of those whole system. You can place it above everything (like in the image above) or underneath the floor. - -1. Place a **Sink/Eternal Water Block** and an **ME Interface** on the corners of a **Quantum Ring** and then place **2x Quartz Fibers/Cable Anchors** between the Sink and ME Interface and on the center of the Quantum Ring. -2. Then place your **2x colored cables** (Lime cables) on top of them along with an **ME Controller**. -3. The **1x colored cable** (Magenta cable) should connect the quantum ring and the ME Interface. - -* Make sure to link your Quantum Rings. - -![Make sure to put quartz fiber or cable anchors to isolate the Lime cable from your home AE2 system](img/phytoae2brain_1.png){.center} - -4. Place **2x ME Storage Bus** on the ME Interface and Sink, facing each other. - -![ME Storage Bus on both the Sink and ME Interface](img/phytoae2brain_2.png){.center} - -5. Have the **ME Interface** stock **Water** and **Phyto-Gro** and set the priority to **-1**. -![ME Interface settings](img/phytoae2brain_interfacesettings.png){.center} - -6. For the **ME Storage Bus on the Sink** settings, have the **Input/Output Mode** to **Extract Only** and put **Water** in the filter by dragging it from JEI. -![Storage Bus on sink settings](img/phytoae2brain_sinkbus.png){.center width='489' height='253'} - ---- - -#### The Modules - -Now we'll build one of the "modules" that make up the entire thing. Each column of Phyto/Interface pairs is **8 blocks tall** since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable. - -1. Each module consists of **2 Phytos** next to each other and an **ME Interface** on each side. -![](img/phytoae2_module.png){.center} - -1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90° to one side depending on which corner it's on. -![](img/phytoae2_modulecorner.png){.center} - -2. For the **ME Interface**, put a **Crafting Card** in and set **Water** and **Phyto-Gro** in the filter by dragging it from JEI. -![](img/phytoae2_cardandfilter.png){.center} - -3. For the Phytos it'll be slightly different depending on which side the ME Interface is on. You will have it **Auto Input/Output** the side touching the interface. The image below is for a phyto with an interface to the left. -![](img/phytoae2_phytosettings.png){.center} - -4. Each Phyto will have **1x Draconic Integral Component & 3x Twinite Flux Linkages**. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these. -![](img/phytoae2_phytoaugs.png){.center} - -??? Question "Why not use Shellite instead of Twinite? KJM explains" - The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component. - -You'll stack these modules to a **maximum of 8 tall** and arrange them into 4 walls. - -???+ tip "Tips" - - Use an AE2 **Memory Card** to copy **ME Interface** settings (`Shift + R-Click` to **Copy**, `R-Click` to **Paste**) - - Use **Redprint** to copy **Phytogenic Insolator** settings (`R-Click` to **Copy** and to **Paste**) - ---- - -#### Connecting and Powering - -You'll put your **Colored Dense Cables** in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos. -![](img/phytoae2_energy.png){.center} - -> Mystical Agriculture | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/mystical-agriculture) diff --git a/docs/atm9/powah.md b/docs/atm9/powah.md deleted file mode 100644 index 4a3b508..0000000 --- a/docs/atm9/powah.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Powah -description: Powah changes -authors: - - AlfredGG ---- - -# Powah! - -**Powah** is a tech mod that adds various ways to generate, store, and transmit FE (Forge Energy). - -### Power Gen Changes - -- **Soul Lava** can now be used in the **Thermo**. This doesn't increase RF/t, but generates 9x more RF per mb. -- Early game generators have been given a buff to make it feel better to start in **Powah** vs other mods. The changes are as followed: - -#### Furnator - -- **Starter**: {~~ 20 ~> 80 RF/t ~~} -- **Basic**: {~~ 80 ~> 160 RF/t ~~} -- **Hardened**: {~~ 200 ~> 400 RF/t ~~} -- **Blazing**: {~~ 800 ~> 1000 RF/t ~~} - -#### Magmator - -- **Starter**: {~~ 20 ~> 80 RF/t ~~} -- **Basic**: {~~ 80 ~> 160 RF/t ~~} -- **Hardened**: {~~ 200 ~> 400 RF/t ~~} -- **Blazing**: {~~ 800 ~> 1000 RF/t ~~} - -#### Thermo Generator - -- **Starter**: {~~ 20 ~> 40 RF/t ~~} -- **Basic**: {~~ 60 ~> 80 RF/t ~~} -- **Hardened**: {~~ 125 ~> 150 RF/t ~~} -- **Blazing**: {~~ 250 ~> 300 RF/t ~~} -- **Niotic**: {~~ 500 ~> 600 RF/t ~~} -- **Spirited**: {~~ 1250 ~> 1500 RF/t~~} -- **Nitro**: {~~ 2750 ~> 3500 RF/t ~~} - -??? Note - - While these are small buffs, using **Soul Lava** gets a massive buff here. **Nitro** tier goes from ~25k RF/t to ~31.5k RF/t. - -#### Solar Generators - -- **Starter**: {~~ 20 ~> 40 RF/t ~~} -- **Basic**: {~~ 60 ~> 120 RF/t ~~} -- **Hardened**: {~~ 180 ~> 400 RF/t ~~} -- **Blazing**: {~~ 540 ~> 1500 RF/t ~~} -- **Niotic**: {~~ 1620 ~> 5000 RF/t ~~} -- **Spirited**: {~~ 5000 ~> 16000 RF/t ~~} -- **Nitro**: {~~ 20000 ~> 50000 RF/t ~~} - -??? Note - While it may seem like a massive buff, **Solar Panels** are more expensive than almost every other generator, including **Reactors**. Each tier requires 3 of the previous tier, so this should make them more of an enticing option for late game players. - -> Powah! | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/powah) diff --git a/docs/atm9/productivebees.md b/docs/atm9/productivebees.md deleted file mode 100644 index cb35274..0000000 --- a/docs/atm9/productivebees.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Productive Bees -description: ATM9 Productive Bees Guide -authors: - - Jonh09 (Original Author) - - ArcTrooper (Editor) ---- - -# Productive Bees - -## Kaimonick's Bee Guides - -[Click here to view Kai's bee guide!](../guides/kaimonickguides.md/#productive-bees) - -## Jonh09's Bee Guide - -Hi, I'm Jonh09 and this guide is to help people who are getting into **Productive Bees** or want to know more advanced stuff. - -If you're starting out and want to learn more, check out [Kai's Guides](#kaimonicks-bee-guides) for complete set of guides. [Pilpoh](https://www.youtube.com/watch?v=7wg3UQ_AsAA) also has an advanced guide! Also, read the **Productive Bees book**; it has all you need to know, including upgrades and how they work, different types of bees, different machines, etc. A glance at the book will help if you get stuck. Also, remember that **JEI** is your best friend. - -This guide's main focus is **genes**. Genes are the stats that bees have that determine their productivity, what conditions they can work in, and other less important ones. I will show you the best genes and how to get them here. - -If you find any errors or something that can be done differently, you can ping me @jonh09. - -Original guide: [Productive Bees GUIDE - Beginning Tutorials + Best Genes and how to get them](https://imgur.com/a/bh2fHtf) - ---- - -### Gene Types - -![A bee's genes](img/pb_genes.png){align=right width='249px' height='132px'} - -Apart from the 5 main genes, there is a 6th gene, the **bee-specific gene**. These are used to make spawn eggs of that bee. Most major mods use bee spawn eggs to connect themselves to Productive Bees. *(EX: Mystical Agriculture essence bees)* - ---- - -| Gene | Description | Levels | Best Level | -| ---- | ----------- | ------ | ---------- | -| **Productivity** | Produces more combs per trip | Normal, Medium, High, Very High | Very High -| **Weather Tolerance** | Determines which weather conditions a bee can work in | None, Rain, Any | Any -| **Behavior** | What time of day the bee can work | [Diurnal]("Only work during daytime"), [Nocturnal]("Only works at night"), [Metaturnal]("Works 24/7") | Metaturnal -| **Endurance** | Affects the bee's max health | Weak, Normal, Medium, Strong | Strong -| **Temper** | Affects bee's hostility | Passive, Normal, Aggressive, Hostile | Passive - -### How to Get Genes - -Now that you know what the genes are, you need to know how to get the genes. When you **squash** a bee to get genes, you will get all of its 6 different genes. The bad news? You only get a small percentage of the gene. The percentage dictates the chance that another bee has to get that gene. To give genes to a different bee, combine a **Honey Treat** with your chosen gene(s) in a crafting grid and then ++rbutton++ on a bee to give them that trait. - -![Bee squashing diagram](img/pb_howtogetgenes.jpeg){.center width='500px' height='500px'} - -???+ abstract "Getting genes is a pretty simple process:" - 1. Get a bee you wish to get the genes of - 2. In a 3 block tall space, put a **Bottler** *(with bottles of course)* on the bottom, and a **Piston** facing down on top with button/lever next to it. - 3. Put the bee in the middle, and quickly press the lever/button, that will squish the bee into a bottler and give you **Squashed Bee Material** - 4. Put that into a **Centrifuge**, and it will give you the 6 genes of the bee. - -Easy right? But remember, it will only give up to around 20% of the gene per bee, so you need to repeat the process 4-5 times. I'll show you how to get genes automatically below. - ---- - -### Gene Automation - -This is a simple semi-automated setup. I reckon you already know how to set up breeding and incubation to get more bees if you are here. - -![Example gene automation setup](img/pb_geneautomation.png) - -#### **1.** The Dispensing of Bees - -For this you can just use a vanilla **Dispenser** + an **RFTools Timer** to send a pulse to it every **20 ticks**, releasing a bee from a cage into the piston area. The lever behind the Timer is just to disable it when you arent using it. - -???+ tip - Make sure you are squishing bees in disposable cages, as those dont cause any clutter and are more straightforward to use - -#### **2.** The Squishing - -This is where the bees will be turned into the **Squashed Bee Material**, the same thing as in the previous explanation. Dont forget to send bottles to the **Bottler** or it will stop squishing bees. - -???+ tip - If you keep the piston extended, like in the image, the bees will get squashed automatically when you push/dispense them into it. - -#### **3.** Processing Bee Material - -Using any Item Collector, pick up the **Squashed Bee Material** and send it to a **Centrifuge** that separates it into the 6 genes. - -#### **4.** Sorting & Improving Genes. - -After getting the genes out of the centrifuge using whatever pipe you prefer, you can send them into a **Gene Indexer**. This machine will sort and combine the genes inside when given a redstone signal *(Lever or Redstone Block)*. It will combine all the genes into their 100% version. These are the ones we are looking for, the ones that allow you to change the genes of a bee 100% of the time. - -#### Optional Step - -Using an item pipe from **Pipez** that can pull 100% genes with NBT filtering. - -Item: `productivebees:gene` - -NBT: `{productivebees_gene_purity:100}` - ---- - -### Getting the Best Genes - -OK, OK, you already know what genes are, how to get them, and how to automate them. This is what you are here for, the *BEST* genes. In this section, I'll discuss the most and least important ones. - -???+ note - My recommendation? Put all your good genes into one bee that you can breed. Then, you will get a baby with the same genes. - - From there, breed them -> Squish them -> Get genes -> Make Honey Treats with those genes, and use those to upgrade all your bees. - -???+ tip - You can put **multiple genes** into the same **Honey Treat**. I like to call this *Bee Steroids*, a honey treat with all the best genes. - -#### Least Important - -The least important ones are **Temper** and **Endurance**. These two are worthless if you use a **Simulation Upgrade** or have them in a box. - -#### Most Important - -##### Productivity: Very High - -![](img/pb_kamikaze.png){align=right} - -This one's the trickiest and most important; this trait can only be gotten from **Kamikaze Bees**. - -**Kamikaze Bees** spawn in a particular way by being attacked. Their only objective is to protect you by... well... going kamikaze on the attacker. - -While wearing a **Bee Nest Helmet** (a Diamond helmet with a Nest on top), if you get hit by a hostile mob, there is a **30% chance** of a Kamikaze Bee spawning. The difficult part? They're *TINY* and *FAST* so you need to have a setup inside an enclosed box, have a **Catcher** ready, or have good aim and cage them once they spawn. - -Get **4-5** of them then squeeze them. This should get you a **100% Very High** Productivity gene. - -!!! warning "Kamikaze Bees can't breed with each other." - -Now, you need to put the gene in an easy-to-breed bee (via Honey Treat + Gene) and breed them, and once an offspring is born with the Very High gene use it to breed more bees of that type. With that, you basically have infinite, Very High Productivity genes. - -##### Behavior: Metaturnal - -![](img/pb_behavior.png){align=right width='350px' height='350px'} - -To get this trait, a bee needs to be **left outside** for a few days. If it starts as **Diurnal**, it will change to **Nocturnal**, then **Metaturnal**. If you have Nocturnal bees, that's better since you are already halfway there. - -I recommend using a **Lead + a Fence** to secure them so they don't fly away. - -!!! warning "You must feed them **Honey Treats** once in a while because they take damage while they're stuck outside" - -##### Weather Tolerance: Any - -There are 2 ways to obtain this. The slow and the fast way. - -The slow: The strategy of leaving the bees outside so they get forced to adapt like the previous one... OR the fast fishing route. - -By fishing I mean fishing for bees, more specifically **Water Bees**. To get them, you will need to fish in a **River biome**. - -!!! tip "If there aren't rivers nearby, use a **Nature's Compass** to point you to a river." - -While using a normal **fishing rod**, there is a chance for a **Water Bee** to come out of the water, and it will be *MAD*, so have a **Cage** on hand to capture it. You will need 2 of those to breed them to make more and to get that sweet weather tolerance. - -![](img/pb_waterbee.png){.center width='500px' height='500px'} - -### Genes When Breeding - -When breeding, you must know how genes are assigned to a child bee. - -The bee on the **Left** side will be the **Main** bee, which is the one with priority gene-wise. This means that the baby will have the genes of the main bee at a minimum. - -The bee on the **Right** only defines the range of gene levels. - -In the image below the "maxed" gene levels of the **Main** bee (Weather tolerance, behavior, and endurance) gets transferred to the child bee. - -![](img/pb_breedingpair.png){.center} - -???+ example - If the main bee has **Productivity: Medium**, and the 2nd bee has **Productivity: Very High**, the baby will have a chance to have either Medium (the minimum the main bee has), High, or Very High. - -You will *never* get a child bee that has genes of a lower level than the main bee. That's why I recommend maxing out the 1st bee so it can be used as the main one for breeding. - -> Productive Bees | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/productivebees) diff --git a/docs/atm9tts/.pages b/docs/atm9tts/.pages deleted file mode 100644 index 007258d..0000000 --- a/docs/atm9tts/.pages +++ /dev/null @@ -1,4 +0,0 @@ -nav: - - README.md - - FAQ: faq.md - - ... \ No newline at end of file diff --git a/docs/atm9tts/README.md b/docs/atm9tts/README.md deleted file mode 100644 index c2aef6a..0000000 --- a/docs/atm9tts/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: All The Mods 9 - To The Sky -description: ATM9-TTS Intro Description ---- - -# All The Mods 9 - -[![](img/atm9TTSLogo.png){.center}](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-9-to-the-sky) - -**All The Mods** started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -**All the Mods 9: To the Sky** is the cap off to the trilogy of sky packs for All The Mods. The team have taken feedback from the first 2 iterations to make this pack the best we have to offer. This pack adds mods that were not in the others such as **Forcecraft**, **Forgiving Void**, **Oreberries**, and **Utilitarian**. We're hoping to make this the most open ended ATM pack yet! - -This skyblock pack features **Ex Machinis: Divitiae Deorum**, an automation addon for **Ex Deorum** built in house by ATM to take you from early game all the way to end game automated resources - -Does "**All the Mods**" really contain **ALL THE MODS**? No, of course not. - -![type:video](https://youtube.com/embed/v7XcOBi8A5g) -![type:video](https://youtube.com/embed/S4sVbYu9u58) -![type:video](https://youtube.com/embed/xn7os2v3YbA) - -> All The Mods 9 - To The Sky | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-9-to-the-sky) | [GitHub](https://github.com/AllTheMods/All-the-mods-9-Sky) diff --git a/docs/atm9tts/faq.md b/docs/atm9tts/faq.md deleted file mode 100644 index 8ba8a34..0000000 --- a/docs/atm9tts/faq.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: ATM9TTS FAQ -description: ATM9TTS Frequently Asked Questions ---- - -# FAQ - -**All The Mods 9 - To The Sky** Frequently Asked Questions - ---- - -???+ Abstract "Gameplay FAQs" - ??? Question "How do I get pebbles? Right clicking dirt doesn't do anything!" - You need to shift-right click dirt to get pebbles. - - ??? Question "How do I get more dirt?" - - You can put any organic matter (leaves, seeds, saplings, etc.) in the same barrels you use to get witch water. - - or Hammer some logs and put the chips in the barrel - - ??? Question "Is '`item/block name`' EMC-able?" - Do `EMC: ` in JEI and it'll list all items that have an EMC value. - - ??? Question "I'm not getting any silkworms!" - If you're doing it the right way with a crook, then you might just have really bad RNG. Keep trying. - -???+ Warning "Technical FAQs" - ??? Question "Why isn't '`insert name`' mod in ATM9-TTS yet?" - ATM packs does not literally contain "All The Mods". Our main focus is having mods that's not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version **1.20.1**, and **Forge** (Not NeoForge), you may make a [suggestion](https://github.com/AllTheMods/ATM-9/issues/1). - - ??? Question "I found a bug/dupe in the pack. How can I report it?" - To report bugs, dupes or similar, head over to the [ATM9-TTS GitHub](https://github.com/AllTheMods/All-the-mods-9-Sky/issues) and open a new issue describing the occurrence. - - ??? Question "I can't complete '`name of quest`' even though I fufilled the requirements?" - You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it's progress if you still have the items. - - ??? Question "What are the recommended Java arguments for this pack?" - - **Client arguments**: send `?args` in the **#bot-spam** channel in our [Discord](https://discord.com/invite/allthemods). - - **Server arguments**: send `?svargs` in the **#bot=spam** channel in our [Discord](https://discord.com/invite/allthemods). - - ??? Question "Why does my game crash while launching?" - Lack of RAM most likely. Send `?allocate` in the **#bot-spam** channel in our [Discord](https://discord.com/invite/allthemods) to learn how to allocate more RAM. If that's not the problem, head to **#atm9-techsupport** and send `?logs` to see how to upload your crash/latest log. - - ??? Question "I crashed and got `Error code 1`, please help" - `Exit code 1` is a generic error from Minecraft. It is no different than "game didn't load, no longer attempting to load. Please refer to the output error log created by your launcher" if you are unsure... please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our [Discord](https://discord.com/invite/allthemods). Try running `?logs` instead. - - ??? Question "I'm having issues connecting to a LAN/Essentials world" - To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these. diff --git a/docs/atmg/.pages b/docs/atmg/.pages deleted file mode 100644 index 3520b62..0000000 --- a/docs/atmg/.pages +++ /dev/null @@ -1,4 +0,0 @@ -nav: - - README.md - - gravitas2 - - ... \ No newline at end of file diff --git a/docs/atmg/README.md b/docs/atmg/README.md deleted file mode 100644 index 93e59d7..0000000 --- a/docs/atmg/README.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Gravitas -description: Gravitas ---- - -# All The Mods - Gravitas - -## Per aspera ad astra - Through hardships to the stars. - -From your early beginnings in this pack, you will be faced with a far different experience than the typical modpack provides. This modpack includes Terrafirmacraft(TFC), which completely overhauls the base Minecraft mechanics, adds dynamic environments with landslides, cave ins and the concept of support beams add an element of danger to mining that extends beyond the monsters you will find underground. An immersive survival experience with detailed world generation with flowing rivers that have an active current, and flow towards oceans, fresh and salt water, Food has an expiration date, and eating it past its date has dire consequences to your health. This pack takes you on a voyage from picking up sticks to craft your first tools, to piloting a rocket to the stars, Can you claw your way to Glacio to locate the stronghold, and face the Ender Dragon? - -All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other "big name" packs include but with a nice mix of some of newer or lesser-known mods as well. - -Does "All the Mods" really contain ALL THE MODS? No, of course not. Especially not this pack. - -![type:video](https://youtube.com/embed/jc9TdnvUcJw) -![type:video](https://youtube.com/embed/Sgx2U7wykMs) -![type:video](https://youtube.com/embed/6wEDmx0WMuQ) - -> All The Mods - Gravitas | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-gravitas) | [GitHub](https://github.com/AllTheMods/tfc) diff --git a/docs/atmg/gravitas2/README.md b/docs/atmg/gravitas2/README.md deleted file mode 100644 index 53a9dc0..0000000 --- a/docs/atmg/gravitas2/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: All The Mods - Gravitas² -description: Gravitas Sequel With GregTech. ---- - -# All The Mods - Gravitas² - -Per aspera ad astra - Through hardships to the stars. - -Starting from primitive stone age technology, hand-knapping your tools, foraging for food, you will progress through the ages covering many classic and new mods to complement the TerraFirmaCraft experience.Create New Age, Thorium Reactors, Integrated Dynamics, Applied Energistics, Stargate Journey Ice & Fire and perhaps the most anticipated addition, GregTech. You will voyage from a primitive beginning, smashing rocks together, to smashing atoms together, to power your voyages to the stars and beyond! - -![type:video](https://youtube.com/embed/DnrVolMHjog) - -> Gravitas² | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-gravitas2) | [Github](https://github.com/AllTheMods/Gravitas2) diff --git a/docs/atms/README.md b/docs/atms/README.md deleted file mode 100644 index 0b72b18..0000000 --- a/docs/atms/README.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: All The Magic - Spellbound -description: ATM-SB Intro Description ---- - -# All The Magic: Spellbound - -You have conquered all the mods, but can you conquer all the magic? With no tech to hold your hand see the world through different eyes as you rely on what the mystic arts has to offer, With a complete rewrite to the ATM star's recipe and each mod intertwined, explore the depths of mods such as blood magic and botania to fulfil your needs for storage, flight, and to protect yourself as you explore the dimensions on offer. - -![type:video](https://youtube.com/embed/usHOp-dNekY) -![type:video](https://youtube.com/embed/WZrx3MP44-g) - -> All The Mods Magic: Spellbound | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-magic-spellbound) | [GitHub](https://github.com/AllTheMods/Spellbound) diff --git a/docs/atmvb/README.md b/docs/atmvb/README.md deleted file mode 100644 index 742da9e..0000000 --- a/docs/atmvb/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: All The Mods - Volcano Block -description: ATM-VB Intro Description ---- - -# All The Mods - Volcano Block - -All the mods volcano block is a modpack is both a reimagination of the 1.12 Volcanoblock and also the third sieve based modpack following on from 6 and 7 To the Sky. - -Multiple resource paths - -Sieving isn't for everyone, this is a known problem with skyblock packs so we like to open you up to different resource generation types the further you get into the modpack, from **Ex Machinis**, our built in-house automation mod for ex nihilo, to **Mystical Agriculture** and **Resource Chickens**, and even void miners from **Occultism** and **Industrial Foregoing** you will never be strapped for diamonds, nor be forced towards one path. - -In **All the Mods VolcanoBlock** we will continue the tradition adding new mods and removing others to change up the feel, whilst keeping to the quality of the To the Sky series - -Does "All The Mods" really contain ALL THE MODS? No, of course not. - -![type:video](https://youtube.com/embed/hQimurrE1wc) -![type:video](https://youtube.com/embed/FTxRXy6K1ac) -![type:video](https://youtube.com/embed/VPXEcK5RcWA) - -> All The Mods - Volcano Block | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-volcanoblock) | [GitHub](https://github.com/AllTheMods/VolcanoBlock) diff --git a/docs/blog/index.md b/docs/blog/index.md deleted file mode 100644 index c58f16c..0000000 --- a/docs/blog/index.md +++ /dev/null @@ -1,2 +0,0 @@ -# Blog - diff --git a/docs/blog/posts/new.md b/docs/blog/posts/new.md deleted file mode 100644 index c303854..0000000 --- a/docs/blog/posts/new.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Example Blog Post -description: Some Post Description -date: 2023-01-31 ---- - -# Example - -This is an example post. \ No newline at end of file diff --git a/docs/guides/.pages b/docs/guides/.pages deleted file mode 100644 index 4ad20a1..0000000 --- a/docs/guides/.pages +++ /dev/null @@ -1,5 +0,0 @@ -nav: - - Contributing to ATG: contributing - - Contributing Translations: translations.md - - kaimonickguides.md - - ... \ No newline at end of file diff --git a/docs/guides/README.md b/docs/guides/README.md deleted file mode 100644 index e8fe838..0000000 --- a/docs/guides/README.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: All The Guides -name: All The Guides -description: How our guides work! ---- - -# All The Guides - ---- - -#### Welcome to the Guides! - -You'll find various mods in the sidebar with tips on how they can be utilized, as well as how to contribute your own guides to this website or to help contribute translations! - ---- - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/guides/biggerreactors.md b/docs/guides/biggerreactors.md deleted file mode 100644 index 5d133a5..0000000 --- a/docs/guides/biggerreactors.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Bigger Reactors -description: Bigger reactors mod description ---- - -# Bigger Reactors - -**Reactors** are the primary multi-block of **Bigger Reactors**. Loosely inspired by the real-life RBMK design, reactors may be used as either a power generator (in **Passive** mode) or as a heat source (in **Active** mode). Reactors consume and produce various Fuel and Waste products, and are highly customizable. - -As of **Bigger Reactors** 0.5.2, the smallest possible reactor size is **3 × 3 × 3**. With the default config, reactors may be built as large as **128 × 128 × 192**, however this may be changed to an absolute maximum of **192 × 192 × 256**. - -## Components - -### Required - -The following components are the bare minimum required to construct any type of reactor. - -- **Reactor Terminals**: are the heart of your reactor. -- **Reactor Casings**: make up the frame and walls of your reactor. -- **Fuel Rods**: are where Fuel and Waste are contained. -- **Control Rods**: are used to maintain control over the reaction. -- **Access Ports**: are used to insert Fuel and extract Waste. - -### Type-Specific - -Certain components may only be used with a specific type of reactor, and cannot be used together in the same reactor. - -The first type of reactor are **Passive Reactors**. These output the energy they generate directly as RF, which may be used by other machines. - -- **Power Taps** are where you extract power from a passive reactor. -: The second type of reactor are **Active Reactors**. These convert the energy they generate into heat, which is used to heat up fluids. -- **Coolant Ports** are used to insert “cold” fluids (such as water) and extract “hot” fluids (such as steam). -- **Coolant Manifolds** are used to increase the surface area for heat transfer. - -### Optional - -Some components are entirely optional and are not required to build a functioning reactor. These may, however, allow for automation and remote control of reactors. - -- **Redstone Ports** allow for control of various reactor functions via Redstone circuits. -- **Computer Ports** allow for control of various reactor functions via Lua scripting. This requires a computers mod such as CC: Tweaked to be installed. -- **Reactor Glass** functions identically to casings, but may only be used on walls. It allows you to see inside of the reactor. - -## Moderators - -**Reactor Moderators** (_commonly incorrectly referred to as **Reactor Coolants**_) are materials placed inside of a Reactor during construction. When a reactor is in operation, a moderator may change the way the reactor performs depending its properties. - -**Moderators** have four main properties that affect the reactor simulation: - -- **Absorption**: The speed at which radiation is absorbed and converted to case heat. -- **Efficiency**: How efficiently absorbed radiation is converted into heat. -- **Moderation**: The effectiveness at which radiation is moderated ("softened"). -- **Conductivity**: How well heat is transferred from the fuel rods to the reactor casing. - -In general, higher values are always better (except for absorption, which may be better or worse depending on your reactor design). For a more in-depth explanation on how to use the information here, see the [simulation page](https://biggerseries.net/en/biggerreactors/reactor/simulation). - -Something to note is that Modpack authors have the ability to add or modify moderators. For an accurate list of supported blocks/fluids, use [Just Enough Items (JEI)](https://www.curseforge.com/minecraft/mc-mods/jei) by checking the uses for the Reactor Terminal (**currently broken on multiplayer**). - -??? "Moderator Properties" - _The values listed below are accurate for Bigger Reactors 0.5.2, for Minecraft 1.16.5. Also correct for 0.6.x (1.17-1.19)_ - - | ID | Absorption | Efficiency | Moderation | Conductivity | - | -- | ---------- | ---------- | ---------- | ------------ | - | astralsorcery:liquid_starlight | 0.85 | 0.8 | 2.0 | 3.0 | - | biggerreactors:ludicrite_block | 0.6 | 0.87 | 3 | 3 | - | bloodmagic:life_essence_block | 0.7 | 0.55 | 1.75 | 2.5 | - | mekanism:ethene | 0.37 | 0.65 | 1.9 | 1.5 | - | mekanism:hydrofluoric_acid | 0.6 | 0.45 | 1.4 | 2.5 | - | mekanism:hydrogen | 0.2 | 0.3 | 1.2 | 0.1 | - | mekanism:hydrogen_chloride | 0.31 | 0.65 | 1.7 | 1 | - | mekanism:lithium | 0.7 | 0.6 | 1.04 | 0.7 | - | mekanism:oxygen | 0.01 | 0.35 | 1.04 | 0.1 | - | mekanism:sodium | 0.23 | 0.6 | 1.7 | 1 | - | mekanism:steam | 0.33 | 0.5 | 1.33 | 0.5 | - | mekanismgenerators:deuterium | 0.03 | 0.3 | 1.07 | 0.1 | - | minecraft:air | 0.1 | 0.25 | 1.1 | 0.05 | - | minecraft:cave_air | 0.1 | 0.25 | 1.1 | 0.05 | - | minecraft:glass | 0.2 | 0.25 | 1.1 | 0.3 | - | minecraft:ice | 0.33 | 0.33 | 1.15 | 0.1 | - | minecraft:snow_block | 0.15 | 0.33 | 1.05 | 0.05 | - | minecraft:void_air | 0.1 | 0.25 | 1.1 | 0.05 | - | minecraft:water | 0.33 | 0.5 | 1.33 | 0.1 | - | minecraft:lava | 0.33 | 0.33 | 1.15 | 0.7 | - | forge:storage_blocks/allthemodium | 0.66 | 0.9 | 3.5 | 3.5 | - | forge:storage_blocks/aluminum | 0.5 | 0.78 | 1.42 | 0.6 | - | forge:storage_blocks/bronze | 0.51 | 0.77 | 1.41 | 1 | - | forge:storage_blocks/copper | 0.5 | 0.75 | 1.4 | 1 | - | forge:storage_blocks/diamond | 0.55 | 0.85 | 1.5 | 3 | - | forge:storage_blocks/electrum | 0.53 | 0.82 | 1.47 | 2.2 | - | forge:storage_blocks/emerald | 0.55 | 0.85 | 1.5 | 2.5 | - | forge:storage_blocks/enderium | 0.53 | 0.88 | 1.6 | 3 | - | forge:storage_blocks/gold | 0.52 | 0.8 | 1.45 | 2 | - | forge:storage_blocks/graphite | 0.1 | 0.5 | 2 | 2 | - | forge:storage_blocks/invar | 0.5 | 0.79 | 1.43 | 0.6 | - | forge:storage_blocks/iron | 0.5 | 0.75 | 1.4 | 0.6 | - | forge:storage_blocks/lead | 0.75 | 0.75 | 1.75 | 1.5 | - | forge:storage_blocks/lumium | 0.75 | 0.55 | 1.5 | 1.8 | - | forge:storage_blocks/nickel | 0.5 | 0.82 | 1.46 | 0.6 | - | forge:storage_blocks/osmium | 0.51 | 0.77 | 1.41 | 1 | - | forge:storage_blocks/platinum | 0.53 | 0.86 | 1.58 | 2.5 | - | forge:storage_blocks/signalum | 0.63 | 0.66 | 1.5 | 1.8 | - | forge:storage_blocks/silver | 0.51 | 0.79 | 1.43 | 1.5 | - | forge:storage_blocks/steel | 0.5 | 0.78 | 1.42 | 0.6 | - | forge:storage_blocks/tin | 0.3 | 0.7 | 1.35 | 0.75 | - | forge:storage_blocks/unobtainium | 0.95 | 0.82 | 2 | 5 | - | forge:storage_blocks/vibranium | 0.15 | 0.75 | 8 | 4 | - | forge:storage_blocks/zinc | 0.51 | 0.77 | 1.41 | 1 | - | biggerreactors:liquid_obsidian | 0.3 | 0.7 | 1.35 | 0.75 | - | allthemodium:molten_allthemodium | 0.66 | 0.9 | 3.5 | 3.5 | - | allthemodium:molten_vibranium | 0.15 | 0.75 | 8 | 4 | - | allthemodium:molten_unobtainium | 0.95 | 0.82 | 2 | 5 | - | allthemodium:vapor_allthemodium | 0.66 | 0.9 | 3.5 | 3.5 | - | allthemodium:vapor_vibranium | 0.15 | 0.75 | 8 | 4 | - | allthemodium:vapor_unobtainium | 0.95 | 0.82 | 2 | 5 | - | forge:superheated_sodium | 0.23 | 0.6 | 1.7 | 1 | - | forge:redstone | 0.75 | 0.55 | 1.6 | 2.5 | - | forge:ender | 0.9 | 0.75 | 2.0 | 2 | - -> Bigger Reactors | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/biggerreactors) diff --git a/docs/guides/contributing/README.md b/docs/guides/contributing/README.md deleted file mode 100644 index 305aeaf..0000000 --- a/docs/guides/contributing/README.md +++ /dev/null @@ -1,308 +0,0 @@ ---- -title: Contributing to ATG -description: How to contribute! -nav: - - examples ---- - -# All The Guides [![](https://img.shields.io/github/actions/workflow/status/AllTheMods/alltheguides/mkdocs.yml?style=flat-square&label=mkdocs)](https://github.com/AllTheMods/alltheguides/actions/workflows/mkdocs.yml) [![](https://img.shields.io/github/actions/workflow/status/AllTheMods/alltheguides/publish.yml?style=flat-square&label=publish)](https://github.com/AllTheMods/alltheguides/actions/workflows/publish.yml) - - ![GitHub Repo stars](https://img.shields.io/github/stars/AllTheMods/alltheguides?style=flat-square) ![GitHub forks](https://img.shields.io/github/forks/AllTheMods/alltheguides) ![GitHub watchers](https://img.shields.io/github/watchers/AllTheMods/alltheguides?style=flat-square) ![GitHub](https://img.shields.io/github/license/AllTheMods/alltheguides?style=flat-square) - ---- - -## Contributing Restructuring Coming Soon™ - -ATG will migrate from `pip` to `pipenv` soon™ - -## Guidelines - -???+ Information "MUST READ" - - !!! Warning "As this guide is currently work-in-progress, guidelines are expected to change." - - 1. You may **NOT** publicly republish **All The Guides** live on another website. - 2. You may **NOT** delete or entirely change another author work (except typos / incorrect information), unless given permission to do so from the original **Author**. - 3. No warnings or errors that prevents `mkdocs serve | build`. - 1. If you get any errors or warnings, try/get help resolving them before pushing. - 2. You may **NOT** disable `strict` mode(s) for any reason. - 4. Your document(s) **MUST** contain a `title` and `description` variable. If you created a page, you may add `authors:`, and additional variables if necessary. [Read Below](#document-headers) - 5. Limit or prevent the use of outside links to content (documents or imagery). If possible in the most minimal and or compressed way, include the content with your document. - 1. This would ensure that content will always remain with the guides, for preservation and offline use. - 2. Assets may be included with document(s) within folders in an organized way. - 6. No profanity, and assets and or links to outside websites that contains adult like content, paid material, and or in-appropriate things. - 1. You'll be **banned** from future **PR's**. - 7. You shall **NOT** touch `mkdocs.yml`, `requirements.txt`, or workflow files, _unless authorized, and you know what you're doing_. - 8. Documentation should ONLY be related to **All The Mods**, if it needs to be. - 9. Javascript is **NOT** allowed. - 10. Folders & files must be in `lowercase` letters, with no spaces. `Camelcase` for image files is allowed. ---- - -**All The Guides** uses [Github Pages](https://pages.github.com/), [MkDocs](https://www.mkdocs.org/) & [Material](https://squidfunk.github.io/mkdocs-material/). - ---- - -## Local Serve / Build - -We use **Github** for our Packs, Mods, and Guides for Collaboration, and CI/CD purposes. - -You will be required to [Serve](#serve), and [Build](#build) this guide, which comes with some minimal [Requirements](#requirements). - ---- - -### Requirements - -- [Python](https://www.python.org/downloads/) 3+ -- Git ([Github Desktop](https://desktop.github.com/) or [Git Cli](https://cli.github.com/)) - - _Your editor may already have Git integrated_ - - For quick edits, you could open a codespace on your forked repo using [Github Web Editor](https://docs.github.com/en/codespaces/the-githubdev-web-based-editor). - -> You're **not** required to have knowledge of them (_specifically **Python**_), but they must be installed.. - ---- - -## Setup - -Fork [All The Guides](https://github.com/AllTheMods/alltheguides/fork). - -### Clone / Checkout `mkdocs` branch - -The __`mkdocs`__ branch is the live - up to date branch that should be used _primarily_. This should be selected by default when you clone the repo. - -Depending on current setup, you may have an editor (_Visual Studio Code_), that has **Git** integration. You're free to use this, Github Desktop or Git. - -#### GitHub Desktop - -Go to `File` -> `Clone repository...` OR do `Ctrl+Shift+O` and select your All the Guides fork. - -!!! info "I recommend putting the repository under `C:/Users/yourPCName` for easy access" - -#### Git CLI - -``` title="Change `USERNAME` to your GitHub name" -git clone https://github.com/USERNAME/alltheguides -``` - -### Enable Workflows - -???+ danger "Make sure Workflows are enabled, otherwise PR's will **NOT** be accepted." - - ![](assets/workflow.png) - ---- - -### Python Dependencies - -All The Guides requires some Python dependencies that's used to build, and provide features to the Guide itself. - -``` title='To Install' -pip install -r ./requirements.txt --upgrade -``` - -``` title="To Uninstall" -pip uninstall -r ./requirements.txt -y -``` - ---- - -## Serve - -Serve will launch a server locally to test changes live @ [`localhost:8000`](http://localhost:8000). Importantly, it will provide warnings, errors, and mistakes {~~(_spelling errors_) ~> disabled for the time being, use Grammarly or another spellchecker ~~}. Once changes are satisfied without issues, test [Build](#build) before you commit / make a Pull Request. - -!!! Information "2 methods in serving MkDocs locally" - - ``` - mkdocs serve - ``` - - ``` - python -m mkdocs serve - ``` - -> `mkdocs serve --help` - ---- - -## Build - -Build will finalize compiling **Markdown** and output **HTML** files in the `site` folder. This folder should be _ignored_. The build should succeed without any warnings or errors before **Committing** and submitting a **Pull Request**. - -!!! Information "2 methods in building MkDocs locally" - - ``` - mkdocs build - ``` - - ``` - python -m mkdocs build - ``` - -> `mkdocs build --help` - ---- - -## Commit (Updating) - -Once you're _committed_ to your changes, you can then **Commit** your changes, then make a **Pull Request** against both `mkdocs` branches / repositories. - -### Committing Changes - -Depending on current setup, you may have an editor (_Visual Studio Code_), that has **Git** integration. You're free to use this, Github Desktop, or Git. - -??? information "Making a GitHub commit with GitHub Desktop" - All changes made will be selected by default, if you do not want to commit some changes, deselect those. - - Fill out the `Summary` and `Description` on the bottom left, click `Commit to mkdocs` when you're ready to commit. - - If you made a mistake, you can undo the commit in the bottom left. Otherwise click `Push origin` to push the commit to GitHub. - -??? Information "Making a Github commit with Git" - Add files to Commit. - ``` - git commit . - ``` - - Add a message to your Commit. We recommend being more descriptive about your Commit(s). - ``` - git commit -m "update" - ``` - - Push changes - ``` - git push - ``` - ---- - -## Pull Request - -When submitting a [Pull Request](https://github.com/AllTheMods/alltheguides/compare), you're requesting us to **Pull** changes from your Repository (Fork) to be approve & merged into the official Guide. This is done in browser by going to our repository and creating a [Pull Request](https://github.com/AllTheMods/alltheguides/compare) from your `mkdocs` branch to ours. - ---- - -## Making a Document - -!!! Warning "Before we begin, make sure you've read the [Guidelines](#guidelines)." - -Documents must be Markdown (`.md`) files. They can also contain **HTML**. - -This Guide is a mix of [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet), [Material](https://squidfunk.github.io/mkdocs-material/reference/), and [PyMarkdown](https://python-markdown.github.io/) features. Simply placing a `.md` file within `docs/`, that file can then be viewed as a page. **Note**: `.md` files MUST contain content. - -Markdown files should have headers at the start to identify document (_Meta / SEO Purposes_), and to credit author(s). Without, it's subjected to be generated based off page content, or be without at all. - ---- - -### Document Headers - -???+ danger "Warning" - Do **NOT** use ++tab++ to indent a list of authors in the `authors` section of document headers. It *WILL* cause errors. - -!!! Warning "" - - !!! Note "" - - Highlighted lines are required!! - -```yaml title='example.md' hl_lines="2 3 11" ---- -title: Title of Your Document -description: Description of your doc -authors: - - John Doe - - Second Name - - Florida Man -comments: false ---- - -# mainPageHeader - -Content. - -## someTitle - -Content. - -> [modName](legacy CurseForge link) - -``` - -???+ Information "Descriptions" - - - `title:` - - The page title of your document - - `description:` - - The description of your page/what it's about. Only shows in the embed of links - - `authors:` - - The list of authors that have contributed to this document. - - `comments:` - - Enable/Disable the use of comments on your page. Default: `false` - -!!! warning "Your page should start with a `H1` (`#`) page header!" - ---- - -### Configure Pages and Navigation (Optional) - -???+ danger "Warning" - Do **NOT** use ++tab++ to indent new lines in `.pages` files. It *WILL* cause errors. - -Per directory, you can create a `.pages` file. This can be used to list each and all pages you want to show up on navigation, in your own order. - -```yaml - -nav: - - page1 - - page2.md - - - dir/ - - dir/README.md - - # Can change page titles - - "3 Is better" : page3 - - # Navigation link to another website - - "Google" : https://google.com - - # custom sub navigation - - 'MORE PAGES': - - page1 - - page2 - - - page1 - - page2 - - page3 - - # 3 dots will auto generate the rest of the pages you've not defined from current directory - - ... -``` - ---- - -### Directory / Page Layout - -This is the directory layout that **MkDocs** uses. - -- **`docs`** | Main folder **MkDocs** will build site contents - - **`cats`** | Custom site directory that can be accessed from **`/cats/`** - - **`.pages`** | Optionally can be used to organize sidebar pages/hierarchy. - - **`README.md`** | Root directory file that **should** be in each folder. - - **`food.md`** | A page that can be accessed from **`/cats/food`** - - **`.pages`** | Optionally can be used to organize sidebar pages/hierarchy. - - **`README.md`** | Root directory file that **should** be in each folder. - - **`name.md`** | Your unique page name. - -`README.md` -: Is the root directory file, if no page is visited specifically. - ---- - -### More Resources - -> Most of all necessary plugins are installed and can be used from Material / PyMarkdown, however consult the team for any additions. - -- [Examples of most of all Markdown features](examples/README.md) -- [Writing Your Docs](https://www.mkdocs.org/user-guide/writing-your-docs/) -- [Material MarkDown](https://squidfunk.github.io/mkdocs-material/reference/) -- [PyMarkdown Extension](https://python-markdown.github.io/extensions/) - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/guides/contributing/examples/README.md b/docs/guides/contributing/examples/README.md deleted file mode 100644 index 64f64cd..0000000 --- a/docs/guides/contributing/examples/README.md +++ /dev/null @@ -1,6 +0,0 @@ - -# Examples - -These are example pages. It's recommended that you view (click edit top right) to see how certain markdown features work if there's no raw example. - -Most of all references are exclusively from [Material Markdown References](https://squidfunk.github.io/mkdocs-material/reference/) \ No newline at end of file diff --git a/docs/guides/contributing/examples/admonition.md b/docs/guides/contributing/examples/admonition.md deleted file mode 100644 index b3f2b0c..0000000 --- a/docs/guides/contributing/examples/admonition.md +++ /dev/null @@ -1,250 +0,0 @@ -# Admonition - -Admonitions, also known as call-outs, are an excellent choice for including side content without significantly interrupting the document flow. Material for MkDocs provides several different types of admonitions and allows for the inclusion and nesting of arbitrary content. - ---- - -Admonitions follow a simple syntax: a block starts with !!!, followed by a single keyword used as a type qualifier. The content of the block follows on the next line, indented by four spaces (2 Tabs): - -### Type Qualifiers - -- Note -- Abstract -- Info -- Top -- Success -- Question -- Warning -- Failure -- Danger -- Bug -- Example -- Quote - -``` -!!! note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. -``` - -!!! note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. - -### Changing the title¶ - -By default, the title will equal the type qualifier in titlecase. However, it can be changed by adding a quoted string containing valid Markdown (including links, formatting, ...) after the type qualifier: - -``` -!!! note "Phasellus posuere in sem ut cursus" - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. -``` - -!!! note "Phasellus posuere in sem ut cursus" - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. - -``` -!!! note "Single line note" -``` - -!!! note "Single line note" - -### Removing the title - -Similar to changing the title, the icon and title can be omitted entirely by adding an empty string directly after the type qualifier. Note that this will not work for collapsible blocks: - -``` -!!! note "" - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. -``` - -!!! note "" - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. - -### Collapsible blocks - -``` -??? note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. -``` - -??? note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. - -Adding a `+` after the `???` token renders the block expanded: - -``` -???+ note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. -``` - -???+ note - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod - nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor - massa, nec semper lorem quam in massa. - -### Types - -#### Note - -??? note - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Abstract - -??? Abstract - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Info - -??? Info - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Tip - -??? Tip - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Success - -??? Success - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Question - -??? Question - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Warning - -??? Warning - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Failure - -??? Failure - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Danger - -??? Danger - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Bug - -??? Bug - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Example - -??? Example - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -#### Quote - -??? Quote - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa. - -??? Note "Stacked Admonitions" - - ??? Abstract - - ??? Info - - ??? Tip - - ??? Success - - ??? Question - - ??? Warning - - ??? Failure - - ??? Danger - - ??? Bug - - ??? Example - - !!! Quote "Hey! You found a secret hidden easter egg :P" - - -### Inline blocks - - -> Use `inline end` to align to the right (_left for rtl languages_). - -#### -> Inline End -``` -!!! info inline end "Lorem ipsum" - - Right Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Nulla et euismod nulla. - Curabitur feugiat, tortor non consequat - finibus, justo purus auctor massa, nec - semper lorem quam in massa. -``` - -!!! info inline end "Lorem ipsum" - - Left Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Nulla et euismod nulla. - Curabitur feugiat, tortor non consequat - finibus, justo purus auctor massa, nec - semper lorem quam in massa. - -#### < Inline - -``` -!!! info inline "Lorem ipsum" - - Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Nulla et euismod nulla. - Curabitur feugiat, tortor non consequat - finibus, justo purus auctor massa, nec - semper lorem quam in massa. -``` - -!!! info inline "Lorem ipsum" - - Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Nulla et euismod nulla. - Curabitur feugiat, tortor non consequat - finibus, justo purus auctor massa, nec - semper lorem quam in massa. diff --git a/docs/guides/contributing/examples/annotations.md b/docs/guides/contributing/examples/annotations.md deleted file mode 100644 index 3977197..0000000 --- a/docs/guides/contributing/examples/annotations.md +++ /dev/null @@ -1,118 +0,0 @@ -# Annotations - -One of the flagship features of Material for MkDocs is the ability to inject annotations – little markers that can be added almost anywhere in a document and expand a tooltip containing arbitrary Markdown on click or keyboard focus. - -### Using Annotations - -Annotations consist of two parts: a marker, which can be placed anywhere in a block marked with the `annotate` class, and content located in a list below the block containing the marker: - -``` -Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. -{ .annotate } - -1. :man_raising_hand: I'm an annotation! I can contain `code`, __formatted - text__, images, ... basically anything that can be expressed in Markdown. -``` - -Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. -{ .annotate } - -1. :man_raising_hand: I'm an annotation! I can contain `code`, __formatted - text__, images, ... basically anything that can be expressed in Markdown. - -> Note that the `annotate` class must only be added to the outermost block. All nested elements can use the same list to define annotations, except when annotations are nested themselves. - -#### In SuperFetch - -Annotations can also be nested inside annotations by adding the `annotate` class to the list item hosting the annotation content, repeating the process: - -``` -Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. -{ .annotate } - -1. :man_raising_hand: I'm an annotation! (1) - { .annotate } - - 1. :woman_raising_hand: I'm an annotation as well! -``` - -Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. -{ .annotate } - -1. :man_raising_hand: I'm an annotation! (1) - { .annotate } - - 1. :woman_raising_hand: I'm an annotation as well! - -#### In Admonitions - -The titles and bodies of [admonitions](admonition.md) can also host annotations by adding the annotate modifier after the type qualifier, which is similar to how [inline blocks](admonition.md#inline-blocks) work: - -``` -!!! note annotate "Phasellus posuere in sem ut cursus (1)" - - Lorem ipsum dolor sit amet, (2) consectetur adipiscing elit. Nulla et - euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo - purus auctor massa, nec semper lorem quam in massa. - -1. :man_raising_hand: I'm an annotation! -2. :woman_raising_hand: I'm an annotation as well! -``` - -#### In Content Tabs - -Content tabs can host annotations by adding the `annotate` class to the block of a dedicated content tab (and not to the container, which is not supported): - -``` -=== "Tab 1" - - Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. - { .annotate } - - 1. :man_raising_hand: I'm an annotation! - -=== "Tab 2" - - Phasellus posuere in sem ut cursus (1) - { .annotate } - - 1. :woman_raising_hand: I'm an annotation as well! -``` - -=== "Tab 1" - - Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. - { .annotate } - - 1. :man_raising_hand: I'm an annotation! - -=== "Tab 2" - - Phasellus posuere in sem ut cursus (1) - { .annotate } - - 1. :woman_raising_hand: I'm an annotation as well! - -#### In Everything Else - -Tt's always possible to leverage the Markdown in HTML extension to wrap arbitrary elements with a div with the annotate class: - -``` -
- -> Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. - -
- -1. :man_raising_hand: I'm an annotation! -``` - -
- -> Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit. - -
- -1. :man_raising_hand: I'm an annotation! - -With this trick, annotations can also be added to blockquotes, lists, and many other elements that are not supported by the [Attribute Lists](https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#attribute-lists) extension. Furthermore, note that [code blocks follow different semantics](https://squidfunk.github.io/mkdocs-material/reference/code-blocks/#adding-annotations). \ No newline at end of file diff --git a/docs/guides/contributing/examples/buttons.md b/docs/guides/contributing/examples/buttons.md deleted file mode 100644 index fd9a6a1..0000000 --- a/docs/guides/contributing/examples/buttons.md +++ /dev/null @@ -1,27 +0,0 @@ -# Buttons - -Material for MkDocs provides dedicated styles for primary and secondary buttons that can be added to any link, `label` or `button` element. This is especially useful for documents or landing pages with dedicated call-to-actions. - -### Buttons - -In order to render a link as a button, suffix it with curly braces and add the .md-button class selector to it. - -`[Subscribe to our newsletter](#){ .md-button }` - -[Subscribe to our newsletter](#){ .md-button } - -### Adding primary buttons¶ - -If you want to display a filled, primary button (like on the landing page of Material for MkDocs), add both, the .md-button and .md-button--primary CSS class selectors. - -`[Subscribe to our newsletter](#){ .md-button .md-button--primary }` - -[Subscribe to our newsletter](#){ .md-button .md-button--primary } - -### Adding icon buttons¶ - -Of course, icons can be added to all types of buttons by using the [icon syntax](https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/#using-icons) together with any valid icon shortcode, which can be easily found with a few keystrokes through [icon search](https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/#search). - -`[Send :fontawesome-solid-paper-plane:](#){ .md-button }` - -[Send :fontawesome-solid-paper-plane:](#){ .md-button } \ No newline at end of file diff --git a/docs/guides/contributing/examples/code.md b/docs/guides/contributing/examples/code.md deleted file mode 100644 index e50b368..0000000 --- a/docs/guides/contributing/examples/code.md +++ /dev/null @@ -1,130 +0,0 @@ -# Code - -`````` -``` py -import tensorflow as tf -``` -`````` - -``` py -import tensorflow as tf -``` - -### Adding Titles - -In order to provide additional context, a custom title can be added to a code block by using the `title=""` option directly after the shortcode, e.g. to display the name of a file: - -`````` -``` py title="bubble_sort.py" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` -`````` - -``` py title="bubble_sort.py" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` - -### Adding annotations - -Code annotations can be placed anywhere in a code block where a comment for the language of the block can be placed, e.g. for JavaScript in `// ...` and `/* ... */`, for YAML in `# ...`, etc. - -`````` -``` yaml -theme: - features: - - content.code.annotate # (1) -``` - -1. :man_raising_hand: I'm a code annotation! I can contain `code`, __formatted - text__, images, ... basically anything that can be written in Markdown. -`````` - -``` yaml -theme: - features: - - content.code.annotate # (1) -``` - -1. :man_raising_hand: I'm a code annotation! I can contain `code`, __formatted - text__, images, ... basically anything that can be written in Markdown. - - -### Stripping comments - -If you wish to strip the comment characters surrounding a code annotation, simply add an `!` after the closing parenthesis of the code annotation: - -`````` -``` yaml -# (1)! -``` - -1. Look ma, less line noise! -`````` - -``` yaml -# (1)! -``` - -1. Look ma, less line noise! - -### Adding line numbers - -Line numbers can be added to a code block by using the `linenums=""` option directly after the shortcode, whereas `` represents the starting line number. A code block can start from a line number other than `1`, which allows to split large code blocks for readability: - -`````` -``` py linenums="1" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` -`````` - -``` py linenums="1" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` - -#### Highlighting specific lines - -Specific lines can be highlighted by passing the line numbers to the `hl_lines` argument placed right after the language shortcode. Note that line counts start at `1`, regardless of the starting line number specified as part of `linenums`: - -`````` -``` py hl_lines="2 3" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` -`````` - -``` py hl_lines="2 3" -def bubble_sort(items): - for i in range(len(items)): - for j in range(len(items) - 1 - i): - if items[j] > items[j + 1]: - items[j], items[j + 1] = items[j + 1], items[j] -``` - -### Highlighting inline code blocks - -Syntax highlighting can be applied to inline code blocks by prefixing them with a shebang, i.e. #!, directly followed by the corresponding `language shortcode`. - -``` -The `#!python range()` function is used to generate a sequence of numbers. -``` - -The `#!python range()` function is used to generate a sequence of numbers. diff --git a/docs/guides/contributing/examples/contenttabs.md b/docs/guides/contributing/examples/contenttabs.md deleted file mode 100644 index 4fc0ae1..0000000 --- a/docs/guides/contributing/examples/contenttabs.md +++ /dev/null @@ -1,119 +0,0 @@ -# Content Tabs - -Sometimes, it's desirable to group alternative content under different tabs, e.g. when describing how to access an API from different languages or environments. Material for MkDocs allows for beautiful and functional tabs, grouping code blocks and other content. - -### Grouping Code Blocks - -``` -=== "C" - - ``` c - #include - - int main(void) { - printf("Hello world!\n"); - return 0; - } - ``` - -=== "C++" - - ``` c++ - #include - - int main(void) { - std::cout << "Hello world!" << std::endl; - return 0; - } - ``` -``` - -=== "C" - - ``` c - #include - - int main(void) { - printf("Hello world!\n"); - return 0; - } - ``` - -=== "C++" - - ``` c++ - #include - - int main(void) { - std::cout << "Hello world!" << std::endl; - return 0; - } - ``` - -### Grouping Other Content - -``` -=== "Unordered list" - - * Sed sagittis eleifend rutrum - * Donec vitae suscipit est - * Nulla tempor lobortis orci - -=== "Ordered list" - - 1. Sed sagittis eleifend rutrum - 2. Donec vitae suscipit est - 3. Nulla tempor lobortis orci -``` - -=== "Unordered list" - - * Sed sagittis eleifend rutrum - * Donec vitae suscipit est - * Nulla tempor lobortis orci - -=== "Ordered list" - - 1. Sed sagittis eleifend rutrum - 2. Donec vitae suscipit est - 3. Nulla tempor lobortis orci - -### Embedded Content - -``` -!!! example - - === "Unordered List" - - ``` markdown - * Sed sagittis eleifend rutrum - * Donec vitae suscipit est - * Nulla tempor lobortis orci - ``` - - === "Ordered List" - - ``` markdown - 1. Sed sagittis eleifend rutrum - 2. Donec vitae suscipit est - 3. Nulla tempor lobortis orci - ``` -``` - -!!! example - - === "Unordered List" - - ``` markdown - * Sed sagittis eleifend rutrum - * Donec vitae suscipit est - * Nulla tempor lobortis orci - ``` - - === "Ordered List" - - ``` markdown - 1. Sed sagittis eleifend rutrum - 2. Donec vitae suscipit est - 3. Nulla tempor lobortis orci - ``` \ No newline at end of file diff --git a/docs/guides/contributing/examples/datatables.md b/docs/guides/contributing/examples/datatables.md deleted file mode 100644 index 6dc6eaf..0000000 --- a/docs/guides/contributing/examples/datatables.md +++ /dev/null @@ -1,69 +0,0 @@ -# Data Tables - -Data tables can be used at any position in your project documentation and can contain arbitrary Markdown, including inline code blocks, as well as [icons and emojis](https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/): - -`````` -| Method | Description | -| ----------- | ------------------------------------ | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | -`````` - -| Method | Description | -| ----------- | ------------------------------------ | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | - -### Content Alignment - -If you want to align a specific column to the `left`, `center` or `right`, you can use the regular Markdown syntax placing `:` characters at the beginning and/or end of the `divider`. - -#### Left - -``` hl_lines="2" -| Method | Description | -| :---------- | :----------------------------------- | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | -``` - -| Method | Description | -| :---------- | :----------------------------------- | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | - -#### Center - -``` hl_lines="2" -| Method | Description | -| :---------: | :----------------------------------: | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | -``` - -| Method | Description | -| :---------: | :----------------------------------: | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | - -#### Right - -``` hl_lines="2" -| Method | Description | -| ----------: | -----------------------------------: | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | -``` - -| Method | Description | -| ----------: | -----------------------------------: | -| `GET` | :material-check: Fetch resource | -| `PUT` | :material-check-all: Update resource | -| `DELETE` | :material-close: Delete resource | \ No newline at end of file diff --git a/docs/guides/contributing/examples/diagrams.md b/docs/guides/contributing/examples/diagrams.md deleted file mode 100644 index 0a21649..0000000 --- a/docs/guides/contributing/examples/diagrams.md +++ /dev/null @@ -1,184 +0,0 @@ -# Diagrams - -Powered by [Mermaid.JS](https://mermaid.js.org/syntax/examples.html) - -### Flow Chars - -Flowcharts are diagrams that represent workflows or processes. The steps are rendered as nodes of various kinds and are connected by edges, describing the necessary order of steps: - - -`````` -``` mermaid -graph LR - A[Start] --> B{Error?}; - B -->|Yes| C[Hmm...]; - C --> D[Debug]; - D --> B; - B ---->|No| E[Yay!]; -``` -`````` - -``` mermaid -graph LR - A[Start] --> B{Error?}; - B -->|Yes| C[Hmm...]; - C --> D[Debug]; - D --> B; - B ---->|No| E[Yay!]; -``` - -#### Sequence Diagrams - -Sequence diagrams describe a specific scenario as sequential interactions between multiple objects or actors, including the messages that are exchanged between those actors: - -`````` -``` mermaid -sequenceDiagram - autonumber - Alice->>John: Hello John, how are you? - loop Healthcheck - John->>John: Fight against hypochondria - end - Note right of John: Rational thoughts! - John-->>Alice: Great! - John->>Bob: How about you? - Bob-->>John: Jolly good! -``` -`````` - -``` mermaid -sequenceDiagram - autonumber - Alice->>John: Hello John, how are you? - loop Healthcheck - John->>John: Fight against hypochondria - end - Note right of John: Rational thoughts! - John-->>Alice: Great! - John->>Bob: How about you? - Bob-->>John: Jolly good! -``` - -#### State Diagrams - -State diagrams are a great tool to describe the behavior of a system, decomposing it into a finite number of states, and transitions between those states: - -`````` -``` mermaid -stateDiagram-v2 - state fork_state <> - [*] --> fork_state - fork_state --> State2 - fork_state --> State3 - - state join_state <> - State2 --> join_state - State3 --> join_state - join_state --> State4 - State4 --> [*] -``` -`````` - -``` mermaid -stateDiagram-v2 - state fork_state <> - [*] --> fork_state - fork_state --> State2 - fork_state --> State3 - - state join_state <> - State2 --> join_state - State3 --> join_state - join_state --> State4 - State4 --> [*] -``` - -#### Class Diagrams - -`````` -``` mermaid -classDiagram - Person <|-- Student - Person <|-- Professor - Person : +String name - Person : +String phoneNumber - Person : +String emailAddress - Person: +purchaseParkingPass() - Address "1" <-- "0..1" Person:lives at - class Student{ - +int studentNumber - +int averageMark - +isEligibleToEnrol() - +getSeminarsTaken() - } - class Professor{ - +int salary - } - class Address{ - +String street - +String city - +String state - +int postalCode - +String country - -validate() - +outputAsLabel() - } -``` -`````` - -``` mermaid -classDiagram - Person <|-- Student - Person <|-- Professor - Person : +String name - Person : +String phoneNumber - Person : +String emailAddress - Person: +purchaseParkingPass() - Address "1" <-- "0..1" Person:lives at - class Student{ - +int studentNumber - +int averageMark - +isEligibleToEnrol() - +getSeminarsTaken() - } - class Professor{ - +int salary - } - class Address{ - +String street - +String city - +String state - +int postalCode - +String country - -validate() - +outputAsLabel() - } -``` - -#### Entity-Relationship Diagrams - -An entity-relationship diagram is composed of entity types and specifies relationships that exist between entities. It describes inter-related things in a specific domain of knowledge: - -`````` -``` mermaid -erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - LINE-ITEM { - string name - int pricePerUnit - } - CUSTOMER }|..|{ DELIVERY-ADDRESS : uses -``` -`````` - -``` mermaid -erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - LINE-ITEM { - string name - int pricePerUnit - } - CUSTOMER }|..|{ DELIVERY-ADDRESS : uses -``` diff --git a/docs/guides/contributing/examples/formatting.md b/docs/guides/contributing/examples/formatting.md deleted file mode 100644 index b711006..0000000 --- a/docs/guides/contributing/examples/formatting.md +++ /dev/null @@ -1,274 +0,0 @@ -# Formatting - -This page will go over extra typography features. If you're not familiar with Markdown, it's best to read [Markdown Cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#headers) - - -[Critic Markup](https://github.com/CriticMarkup/CriticMarkup-toolkit) can be used, which adds the ability to highlight suggested changes, as well as add inline comments to a document: - -![](img/formattingWorkaroundLight.png#only-light){.center} -![](img/formattingWorkaroundDark.png#only-dark){.center width='826px' height='288px'} - -Text can be {--deleted--} and replacement text {++added++}. This can also be -combined into {~~one~>a single~~} operation. {==Highlighting==} is also -possible {>>and comments can be added inline<<}. - -{== - -Formatting can also be applied to blocks by putting the opening and closing -tags on separate lines and adding new lines between the tags and the content. - -==} - ---- -### Highlighting Text - -Text can be highlighted with a simple syntax, which is more convenient that directly using the corresponding `mark`, `ins` and `del` HTML tags: - -``` -- ==This was marked== -- ^^This was inserted^^ -- ~~This was deleted~~ -``` - -- ==This was marked== -- ^^This was inserted^^ -- ~~This was deleted~~ - ---- -### Sub and Super Scripts - -Text can be sub- and superscripted with a simple syntax, which is more convenient than directly using the corresponding `sub` and `sup` HTML tags: - -``` -- H~2~O -- A^T^A -``` - -- H~2~O -- A^T^A - ---- -### Adding keyboard keys - -Keyboard keys can be rendered with a simple syntax. Consult the [Python Markdown Extensions documentation](https://facelessuser.github.io/pymdown-extensions/extensions/keys/#extendingmodifying-key-map-index) to learn about all available shortcodes: - -``` -++ctrl+alt+del++ - -++up+down+left+right++ - -++lbutton+mbutton+rbutton++ -``` - -++ctrl+alt+del++ - -++up+down+left+right++ - -++lbutton+mbutton+rbutton++ - ---- -## Lists - -### Un-Ordered Lists - -``` -- Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur - accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh - lacinia sed. Aenean in finibus diam. - - * Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. - * Nam vulputate tincidunt fringilla. - * Nullam dignissim ultrices urna non auctor. -``` - -- Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur - accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh - lacinia sed. Aenean in finibus diam. - - * Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. - * Nam vulputate tincidunt fringilla. - * Nullam dignissim ultrices urna non auctor. - ---- -### Ordered Lists - -``` -1. Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis - sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis - nulla. Vivamus a pharetra leo. - - 1. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet - quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a - ultricies libero efficitur sed. - - 2. Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet - rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a. - - 1. Mauris dictum mi lacus - 2. Ut sit amet placerat ante - 3. Suspendisse ac eros arcu -``` - -1. Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis - sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis - nulla. Vivamus a pharetra leo. - - 1. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet - quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a - ultricies libero efficitur sed. - - 2. Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet - rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a. - - 1. Mauris dictum mi lacus - 2. Ut sit amet placerat ante - 3. Suspendisse ac eros arcu - ---- -### Definition Lists: - -``` -`Lorem ipsum dolor sit amet` - -: Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus - tellus non sem sollicitudin, quis rutrum leo facilisis. - -`Cras arcu libero` - -: Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin - ut eros sed sapien ullamcorper consequat. Nunc ligula ante. - - Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. - Nam vulputate tincidunt fringilla. - Nullam dignissim ultrices urna non auctor. -``` - -`Lorem ipsum dolor sit amet` - -: Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus - tellus non sem sollicitudin, quis rutrum leo facilisis. - -`Cras arcu libero` - -: Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin - ut eros sed sapien ullamcorper consequat. Nunc ligula ante. - - Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. - Nam vulputate tincidunt fringilla. - Nullam dignissim ultrices urna non auctor. - ---- -### Task Lists - -``` -- [x] Lorem ipsum dolor sit amet, consectetur adipiscing elit -- [ ] Vestibulum convallis sit amet nisi a tincidunt - * [x] In hac habitasse platea dictumst - * [x] In scelerisque nibh non dolor mollis congue sed et metus - * [ ] Praesent sed risus massa -- [ ] Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque -``` - -- [x] Lorem ipsum dolor sit amet, consectetur adipiscing elit -- [ ] Vestibulum convallis sit amet nisi a tincidunt - * [x] In hac habitasse platea dictumst - * [x] In scelerisque nibh non dolor mollis congue sed et metus - * [ ] Praesent sed risus massa -- [ ] Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque - ---- -## Tool Tips - -The Markdown syntax allows to specify a `title` for each link, which will render as a tooltip. Add a tooltip to a link with the following lines: - -```title="Link Tooltip Title" -[Hover me](https://example.com "I'm a tooltip!") -``` - -[Hover me](https://example.com "I'm a tooltip!") - ---- -```title="Link Reference Tooltip" -[Hover me][example] - - [example]: https://example.com "I'm a tooltip!" -``` - -Tooltips can also be added to link references: - -[Hover me][example] - - [example]: https://example.com "I'm a tooltip!" - ---- -For all other elements, a title can be added by using the Attribute Lists extension: - -``` -:material-information-outline:{ title="Important information" } -``` - -:material-information-outline:{ title="Important information" } - ---- -### Adding abbreviations - -Abbreviations can be defined by using a special syntax similar to URLs and footnotes, starting with a `*` and immediately followed by the term or acronym to be associated in square bracket. Once an abbreviation is defined, it can be used anywhere in the document. - -```title="Example Abbreviation Usage" -The HTML specification is maintained by the W3C. - -*[HTML]: Hyper Text Markup Language -*[W3C]: World Wide Web Consortium -``` - -The HTML specification is maintained by the W3C. - -*[HTML]: Hyper Text Markup Language -*[W3C]: World Wide Web Consortium - ---- -### Adding a glossary - -```title="Example Glossary" -Lorem ipsum[^1] dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor -incididunt ut labore et dolore magna aliqua. Ut enim[^2] ad minim veniam, quis nostrud -exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - - [^1]: - This is a glossary that will be added at the bottom of the page and is clickable. - [^2]: - This is also a glossary at the end of the page. -``` -Lorem ipsum[^1] dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor -incididunt ut labore et dolore magna aliqua. Ut enim[^2] ad minim veniam, quis nostrud -exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - - [^1]: - This is a glossary that will be added at the bottom of the page and is clickable. - [^2]: - This is also a glossary at the end of the page. - ---- -### Adding Hidden Comments - -You can add comments within an document to communicate with other contributors that may edit the file. - -`` - -``` - -``` - - - - - -However these will show in "View Source" if a user does so. To prevent that there is another way to add comments. - -`[//]: # (This type of comment will not show in either the final HTML or in "View Source")` - -[//]: # (This type of comment will not show in either the final HTML or in "View Source") diff --git a/docs/guides/contributing/examples/imagery.md b/docs/guides/contributing/examples/imagery.md deleted file mode 100644 index b15df70..0000000 --- a/docs/guides/contributing/examples/imagery.md +++ /dev/null @@ -1,87 +0,0 @@ -# Imagery - -### Resizing - -Images can be done as normal, - -`![](link_to_image.png)` - -![](../../../assets/images/atm.png) - -Images can also be clicked, but if wondering you can put captions inside `[]` - -`![All The Mods Logo](link_to_image.png)` - -![All The Mods Logo](../../../assets/images/atm.png) - -However you can also define sizes for images, as you would with CSS. - -`![](link_to_image.png){width='25px'}` - -![](../../../assets/images/atm.png){width='25px'} - -Within `{}` you can define your HTML tag attributes. You could even use `style` - -`![](link_to_image.png){style='width: 50px'}` - -![](../../../assets/images/atm.png){style='width: 50px'} - -And multiple attributes at that - -`![](link_to_image.png){width='75px' height='75px'}` - -![](../../../assets/images/atm.png){width='75px' height='75px'} - -> Note: A space cannot be between the link and `{}`. - -You can also center images on the page using `{.center}`, and or `{.right}` - -`![](link_to_image.png){.center width='75px' height='75px'}` - -`![](link_to_image.png){.right width='75px' height='75px'}` - -`![](link_to_image.png){.center}` - -![](../../../assets/images/atm.png){.center width='75px' height='75px'} - ---- - -![](../../../assets/images/atm.png){.right width='75px' height='75px'} - ---- - -![](../../../assets/images/atm.png){.center} - -### Images With Links - -Similar to images, clicking images below would redirect you too google - -`[![](link_to_image.png)](https:/google.com)` - -You can also use the same attribute properties for width, height, style, etc - -`[![](link_to_image.png){width='100px' height='100px'}](https:/google.com)` - -[![](../../../assets/images/atm.png){width='100px' height='100px'}](https:/google.com) - -### Gifs - -Works the same way as images. - -### Videos - -`![type:video](url_to_video.mp4)` - -> YouTube embed links & html iframe can also work. `https://youtube.com/embed/` - -### Styles - -As before you can use style (CSS) to add some more customizations - -``` -![](link_to_image.png){style='border: 3px solid red; transform: rotate(45deg); width: 125px; height: 125px'} -``` - -![](../../../assets/images/atm.png){style='border: 3px solid red; transform: rotate(45deg); width: 125px; height: 125px'} - - diff --git a/docs/guides/integrateddynamics/.pages b/docs/guides/integrateddynamics/.pages deleted file mode 100644 index 9833ca4..0000000 --- a/docs/guides/integrateddynamics/.pages +++ /dev/null @@ -1 +0,0 @@ -title: Integrated Dynamics \ No newline at end of file diff --git a/docs/guides/integrateddynamics/README.md b/docs/guides/integrateddynamics/README.md deleted file mode 100644 index da1eb64..0000000 --- a/docs/guides/integrateddynamics/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Integrated Dynamics - -Integrated Dynamics is a mod which allows you to build networks for complex automation and system integration. - -> [Integrated Dynamics](https://legacy.curseforge.com/minecraft/mc-mods/integrated-dynamics) diff --git a/docs/guides/integrateddynamics/infinitefluidtransfer.md b/docs/guides/integrateddynamics/infinitefluidtransfer.md deleted file mode 100644 index b76292d..0000000 --- a/docs/guides/integrateddynamics/infinitefluidtransfer.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Infinite Fluid Transfer -description: Infinite Fluid Transfer -authors: - -Jebraltar -date: 2023-09-10 ---- - -# Infinite Fluid Transfer - -## Items Required - - Sink (or other infinite fluid source) - - Variable Card - - Logic Cable - - Fluid Interface - - Fluid Exporter - -## Setting it up - - 1. Place a Sink down where you want it - 2. Put the Fluid Interface on the Sink via crouch + right-click - 3. Put a Fluid Exporter on the block you want to export fluid into, also by crouch + right-clicking - 4. Connect the Fluid Interface and Fluid Exporter with Logic Cables - 5. Right-click the Fluid Exporter to open an interface - 6. Insert a Variable Card in the **Export All Fluids** row - 7. Click the **+** icon on the **Export All Fluids** row - 8. Cycle pages with the **>** icon in the top right of the interface to **Fluid Transfer Rate** - 9. Set the value to **2000000000** - 10. Close the interface - 11. Enjoy infinite fluid! - -## How it works - -The Fluid Interface makes the Sink accessible to the Integrated Dynamics network - -The Fluid Exporter exports fluids on the network into the block it is attached to - -The Logic Cable connecting the interface and exporter serves as the network - -The Variable Card acts as a boolean true value to enable the **Export All Fluids** mode on the Fluid Exporter - - - -> [Integrated Dynamics](https://legacy.curseforge.com/minecraft/mc-mods/integrated-dynamics) diff --git a/docs/guides/kaimonickguides.md b/docs/guides/kaimonickguides.md deleted file mode 100644 index 71062ed..0000000 --- a/docs/guides/kaimonickguides.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Kaimonick's Guides -description: A collection of Kaimonick's guides -authors: - - Kaimonick ---- - -# Kaimonick's Guides - -!!! info "Click on the images to view them!" - -!!! note "Need to know something that isn't covered here? DM me on" - - Reddit: **u/Fiddlesticc** - - Discord: **@kaimonick** - ---- - -## Apotheosis - -![](img/kaiApotheosisGuide.png){.center} - ---- - -## Applied Energistics 2 - -=== "Part 1: The Basics" - - ![](img/kaiAE2Guide1.png){.center} - -=== "Part 2: Intro to Autocrafting" - - ![](img/kaiAE2Guide2.png){.center} - -=== "Part 3: P2P & Other Novelties" - - ![](img/kaiAE2Guide3.png){.center} - ---- - -## Pneumatic Craft - -![](img/kaiPneumaticCraftGuide.png){.center} - ---- - -## Productive Bees - -=== "Part 1: The Beesics" - - ![](img/kaiTheBeesics.png){.center} - -=== "Part 2: Genes and Advanced Info" - - ![](img/kaiAdvancedBeeGuide.png){.center} - -=== "Part 3: Addendum" - - ![](img/kaiBeeAddendum.png){.center} - ---- diff --git a/docs/guides/translations.md b/docs/guides/translations.md deleted file mode 100644 index 0c2a5a7..0000000 --- a/docs/guides/translations.md +++ /dev/null @@ -1,352 +0,0 @@ ---- -title: Contributing Translations -description: How to Contribute Translations to ATM! -authors: ---- - -# All The Translations - -## Important! - -There is ***no*** set or forced timeline for translations. *Work on them at your own pace!* PR them however you want, either as whole chapters, sections of chapters, or even the whole thing if you want. **We are incredibly grateful for any contributions you make!** - -Also, tell a staff member that you'd like to translate so they can give you access to the #translation-department, where you can ask questions and collaborate with other translators! - -???+ warning "Important note for packs in development" - If you are translating a pack that is under ***active development***, then you need to use the lang file from the **`dev` branch**, not `main`. The `dev` branch will always contain the most up-to-date quest lang file that you will translate. - -???+ danger "Note regarding AI/Machine translations" - We are **not** looking for AI/Machine translations. We are looking for native speakers who are looking to put in the effort to make sure grammar is correct for readers of that language. We would've done it ourselves if we wanted a cheap attempt at quest translations. - ---- - -## Getting Started - -This guide will take you in chronological order from forking a repo, to committing, and then submitting a pull request. - -### Requirements - -- Know the language you want to translate *(duh)* -- A text editor ([Notepad++](https://notepad-plus-plus.org) is a great one) -- Have [Github Desktop](https://desktop.github.com/) or [Git Cli](https://cli.github.com/) - - **GitHub Desktop is recommended for those not familiar with Git.** - - For quick edits, you can open a codespace on your forked repo using [Github Web Editor](https://docs.github.com/en/codespaces/the-githubdev-web-based-editor#opening-the-githubdev-editor). - - OR edit the lang file directly in your browser. [Explained below](#making-quick-edits). - - OR you can simply download the translation key file then upload to your repository. [Explained below](#another-optional-way). - ---- - -### Fork the Repository - -Fork the modpack/mod you want to translate. - -- [ATM9/No Frills (NF's quests are the same as 9, just no Greg)](https://github.com/AllTheMods/ATM-9/fork) -- [ATM9 to the Sky](https://github.com/AllTheMods/All-the-mods-9-Sky/fork) -- [Gravitas 1](https://github.com/AllTheMods/tfc/fork) -- [Gravitas 2](https://github.com/AllTheMods/Gravitas2/fork) - -[All The Mods GitHub](https://github.com/AllTheMods) for any modpack that isn't listed above. - ---- - -### Clone `main` branch - -This will **Clone** your fork from GitHub onto your computer. - -???+ information "GitHub Desktop" - Go to `File` -> `Clone repository...` OR do `Ctrl+Shift+o` and select your ATM Modpack fork. - - !!! info "I recommend putting the repository under `C:/Users/yourPCName` for easy access" - -??? information "Git CLI" - ``` title="Change `USERNAME` to your GitHub name and `MODPACK` to the name of your fork" - git clone https://github.com/USERNAME/MODPACK - - ``` ---- - -After cloning the repository go to where you cloned it on your computer and go to `packName/kubejs/assets/kubejs/lang` then copy and paste the `en_us.json` file into the same spot. - -Rename the copied `en_us.json` to the language code of the lanuage you want to translate. All language codes can be found below or [here](http://www.lingoes.net/en/translator/langcode.htm). - -#### Language Codes - -??? abstract "Language Codes (Ctrl+F to find language)" - | Code | Language | - |----- | -------- | - |af_ZA | Afrikaans (South Africa) | - |ar_AE | Arabic (U.A.E.) | - |ar_BH | Arabic (Bahrain) | - | ar_DZ | Arabic (Algeria) | - | ar_EG | Arabic (Egypt) | - | ar_IQ | Arabic (Iraq) | - | ar_JO | Arabic (Jordan) | - | ar_KW | Arabic (Kuwait) | - | ar_LB | Arabic (Lebanon) | - | ar_LY | Arabic (Libya) | - | ar_MA | Arabic (Morocco) | - | ar_OM | Arabic (Oman) | - | ar_QA | Arabic (Qatar) | - | ar_SA | Arabic (Saudi Arabia) | - | ar_SY | Arabic (Syria) | - | ar_TN | Arabic (Tunisia) | - | ar_YE | Arabic (Yemen) | - | az_AZ | Azeri (Latin) | (Azerbaijan) | - | az_AZ | Azeri (Cyrillic) | (Azerbaijan) | - | be_BY | Belarusian (Belarus) | - | bg_BG | Bulgarian (Bulgaria) | - | bs_BA | Bosnian (Bosnia and Herzegovina) | - | ca_ES | Catalan (Spain) | - | cs_CZ | Czech (Czech Republic) | - | cy_GB | Welsh (United Kingdom) | - | da_DK | Danish (Denmark) | - | de_AT | German (Austria) | - | de_CH | German (Switzerland) | - | de_DE | German (Germany) | - | de_LI | German (Liechtenstein) | - | de_LU | German (Luxembourg) | - | dv_MV | Divehi (Maldives) | - | el_GR | Greek (Greece) | - | en_AU | English (Australia) | - | en_BZ | English (Belize) | - | en_CA | English (Canada) | - | en_CB | English (Caribbean) | - | en_GB | English (United Kingdom) | - | en_IE | English (Ireland) | - | en_JM | English (Jamaica) | - | en_NZ | English (New Zealand) | - | en_PH | English (Republic of the Philippines) | - | en_TT | English (Trinidad and Tobago) | - | en_US | English (United States) | - | en_ZA | English (South Africa) | - | en_ZW | English (Zimbabwe) | - | es_AR | Spanish (Argentina) | - | es_BO | Spanish (Bolivia) | - | es_CL | Spanish (Chile) | - | es_CO | Spanish (Colombia) | - | es_CR | Spanish (Costa Rica) | - | es_DO | Spanish (Dominican Republic) | - | es_EC | Spanish (Ecuador) | - | es_ES | Spanish (Castilian) | - | es_ES | Spanish (Spain) | - | es_GT | Spanish (Guatemala) | - | es_HN | Spanish (Honduras) | - | es_MX | Spanish (Mexico) | - | es_NI | Spanish (Nicaragua) | - | es_PA | Spanish (Panama) | - | es_PE | Spanish (Peru) | - | es_PR | Spanish (Puerto Rico) | - | es_PY | Spanish (Paraguay) | - | es_SV | Spanish (El Salvador) | - | es_UY | Spanish (Uruguay) | - | es_VE | Spanish (Venezuela) | - | et_EE | Estonian (Estonia) | - | eu_ES | Basque (Spain) | - | fa_IR | Farsi (Iran) | - | fi_FI | Finnish (Finland) | - | fo_FO | Faroese (Faroe Islands) | - | fr_BE | French (Belgium) | - | fr_CA | French (Canada) | - | fr_CH | French (Switzerland) | - | fr_FR | French (France) | - | fr_LU | French (Luxembourg) | - | fr_MC | French (Principality of Monaco) | - | gl_ES | Galician (Spain) | - | gu_IN | Gujarati (India) | - | he_IL | Hebrew (Israel) | - | hi_IN | Hindi (India) | - | hr_BA | Croatian (Bosnia and Herzegovina) | - | hr_HR | Croatian (Croatia) | - | hu_HU | Hungarian (Hungary) | - | hy_AM | Armenian (Armenia) | - | id_ID | Indonesian (Indonesia) | - | is_IS | Icelandic (Iceland) | - | it_CH | Italian (Switzerland) | - | it_IT | Italian (Italy) | - | ja_JP | Japanese (Japan) | - | ka_GE | Georgian (Georgia) | - | kk_KZ | Kazakh (Kazakhstan) | - | kn_IN | Kannada (India) | - | ko_KR | Korean (Korea) | - | kok_IN | Konkani (India) | - | ky_KG | Kyrgyz (Kyrgyzstan) | - | lt_LT | Lithuanian (Lithuania) | - | lv_LV | Latvian (Latvia) | - | mi_NZ | Maori (New Zealand) | - | mk_MK | FYRO Macedonian (Former Yugoslav Republic of Macedonia) | - | mn_MN | Mongolian (Mongolia) | - | mr_IN | Marathi (India) | - | ms_BN | Malay (Brunei Darussalam) | - | ms_MY | Malay (Malaysia) | - | mt_MT | Maltese (Malta) | - | nb_NO | Norwegian (Bokm?l) (Norway) | - | nl_BE | Dutch (Belgium) | - | nl_NL | Dutch (Netherlands) | - | nn_NO | Norwegian (Nynorsk) (Norway) | - | ns_ZA | Northern Sotho (South Africa) | - | pa_IN | Punjabi (India) | - | pl_PL | Polish (Poland) | - | ps_AR | Pashto (Afghanistan) | - | pt_BR | Portuguese (Brazil) | - | pt_PT | Portuguese (Portugal) | - | qu_BO | Quechua (Bolivia) | - | qu_EC | Quechua (Ecuador) | - | qu_PE | Quechua (Peru) | - | ro_RO | Romanian (Romania) | - | ru_RU | Russian (Russia) | - | sa_IN | Sanskrit (India) | - | se_FI | Sami (Northern) (Finland) | - | se_FI | Sami (Skolt) (Finland) | - | se_FI | Sami (Inari) (Finland) | - | se_NO | Sami (Northern) (Norway) | - | se_NO | Sami (Lule) (Norway) | - | se_NO | Sami (Southern) (Norway) | - | se_SE | Sami (Northern) (Sweden) | - | se_SE | Sami (Lule) (Sweden) | - | se_SE | Sami (Southern) (Sweden) | - | sk_SK | Slovak (Slovakia) | - | sl_SI | Slovenian (Slovenia) | - | sq_AL | Albanian (Albania) | - | sr_BA | Serbian (Latin) (Bosnia and Herzegovina) | - | sr_BA | Serbian (Cyrillic) (Bosnia and Herzegovina) | - | sr_SP | Serbian (Latin) (Serbia and Montenegro) | - | sr_SP | Serbian (Cyrillic) (Serbia and Montenegro) | - | sv_FI | Swedish (Finland) | - | sv_SE | Swedish (Sweden) | - | sw_KE | Swahili (Kenya) | - | syr_SY | Syriac (Syria) | - | ta_IN | Tamil (India) | - | te_IN | Telugu (India) | - | th_TH | Thai (Thailand) | - | tl_PH | Tagalog (Philippines) | - | tn_ZA | Tswana (South Africa) | - | tr_TR | Turkish (Turkey) | - | tt_RU | Tatar (Russia) | - | uk_UA | Ukrainian (Ukraine) | - | ur_PK | Urdu (Islamic Republic of Pakistan) | - | uz_UZ | Uzbek (Latin) (Uzbekistan) | - | uz_UZ | Uzbek (Cyrillic) (Uzbekistan) | - | vi_VN | Vietnamese (Viet Nam) | - | xh_ZA | Xhosa (South Africa) | - | zh_CN | Chinese (S) | - | zh_HK | Chinese (Hong Kong) | - | zh_MO | Chinese (Macau) | - | zh_SG | Chinese (Singapore) | - | zh_TW | Chinese (T) | - | zu_ZA | Zulu (South Africa) | - ---- - -#### Another Optional Way - -Instead of copying the entire repo onto your computer, you can also download only the lang file for the respective pack and translate it. - -Download the `en_us.json` lang file from the respective pack, the links below are the most up-to-date files the translations are to be based off of. - -- [ATM9/No Frills](https://github.com/AllTheMods/ATM-9/blob/main/kubejs/assets/kubejs/lang/en_us.json) -- [ATM9 to the Sky](https://github.com/AllTheMods/All-the-mods-9-Sky/blob/dev/kubejs/assets/kubejs/lang/en_us.json) -- [Gravitas 1](https://github.com/AllTheMods/tfc/blob/main/kubejs/assets/kubejs/lang/en_us.json) -- [Gravitas 2](https://github.com/AllTheMods/Gravitas2/blob/main/kubejs/assets/gravitas/lang/en_us.json) - -For all other packs, the lang file will be under `packName/kubejs/assets/kubejs/lang/en_us.json` in their [respective repositories](https://github.com/AllTheMods). - -???+ warning "Important" - As state in the beginning, if you are translating a pack that is in active development, then you need to use the same file path as above but for the **`dev` branch**. - ---- - -## How ATM Quests Work - -Before you get to translating you'll want to know how ATM quests work. ATM Quests use a **key:value** system to make quest creation and translation efforts easier. It works by assigning a value (ex: a quest description) to a key (ex: a specific quest). - -!!! example "For example `atm9.quest.mekanism.desc.basicAlloy` would point to the quest to make Mekanism Alloy." - -???+ information "The format for quests are as follows:" - `packName.quest/chapterTitle.chapterName.description/title/subtitle.nameOfQuest` - -ATM quests also use [Minecraft Formatting Codes](https://minecraft.wiki/w/Formatting_codes) for colored text, so make sure you put those color codes back in after translating! - -You will also see `//n` which puts the text on a new line, so be sure to put those back in their proper places also. - -???+ tip - You can view your translations as you do them by doing `/refresh` to view changes in-game. Make sure to change Minecraft's language to view it. - ---- - -## Commit (Updating) - -Once you're _committed_ to your translations, you can then **Commit** them, then make a **Pull Request** against both `main` branches / repositories. - -### Committing Changes - -Depending on current setup, you may have an editor (_Visual Studio Code_), that has **Git** integration. You're free to use this, Github Desktop, or Git. - -???+ information "Making a commit with GitHub Desktop" - 1. Fill out the **`Summary`** and **`Description`** on the bottom left - 2. Click **`Commit to main`** when you're ready to commit. - - If you made a mistake, you can undo the commit in the bottom left. Otherwise click **`Push origin`** to push the commit to GitHub. - -???+ Information "If you downloaded just the lang file" - 1. Go to your repository on the website and go to same spot you downloaded the `en_us.json` lang file from. - 2. Click **`Add file`** in the top right and click **`Upload files`** - 3. Upload your translated lang file and click **`Commit changes`** - -??? Information "Making a commit with Git" - Add files to Commit. - ``` - git commit . - ``` - - Add a message to your Commit. We recommend being more descriptive about your Commit(s). - ``` - git commit -m "update" - ``` - - Push changes - ``` - git push - ``` - ---- - -## Pull Request - -When submitting a PR (Pull Request), you're requesting us to **Pull** translations from your Repository (Fork) to be approve & merged into the official pack. This is done in browser by going to the modpack's repository and creating a PR from your `main` branch to ours. - ---- - -## Making Quick Edits - -!!! warning "This requires you to have committed your lang file at least once." - -Instead of going through the above process again to do a small correction or addition, you can do an edit directly in your browser! - -**1.** Go to your fork of the pack you are translating and navigate to `kubejs/assets/kubejs/lang` and click on your lang file. - -**2.** Click the little edit button in the top-right under the `History` button. -![Yes I use light mode for GitHub, bite me.](img/translationQuickEdit1.png) - -**3.** After you are done with your edits, click `Commit changes...` and fill out what changes you made, then click `Commit changes` - -**4.** Now when you go to the "homepage" of your fork, there should be a yellow banner that has a `Compare & pull request` button. That will be how you make a PR for your quick edit. -![](img/translationQuickEdit2.png) - ---- - -## More Resources - -Most of everything you need to know is explained in this guide, however if you have questions or concerns feel free to ask in the #translation-department! - -- [ToshibaMicrowave's FTBQuests Tutorials](https://www.youtube.com/playlist?list=PLi-eopKJxIIg1K3sAlxwHLwFixLE20ezZ) - - This playlist contains short tutorials covering [FTB Quests](https://legacy.curseforge.com/minecraft/mc-mods/ftb-quests-forge) -- [List of Translators](https://discord.com/channels/254530689225981953/1240295487509368872/1251896531544571945) - - List of languages and their translators. You need access to the **#translation-department** to view the [Discord](https://discord.com/invite/allthemods) message. -- [List of Language Codes](http://www.lingoes.net/en/translator/langcode.htm) - - Browser may give you a warning since the site is in `http` and not `https`. -- [Minecraft Formatting Codes](https://minecraft.wiki/w/Formatting_codes) - - Instead of using `§`, you will use `&` for all color codes within the quests. - ---- - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) diff --git a/docs/help/.pages b/docs/help/.pages deleted file mode 100644 index bea6c58..0000000 --- a/docs/help/.pages +++ /dev/null @@ -1,3 +0,0 @@ -nav: - - README.md - - ... \ No newline at end of file diff --git a/docs/help/README.md b/docs/help/README.md deleted file mode 100644 index c875dc4..0000000 --- a/docs/help/README.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Help -description: Get help with All The Mods! ---- - -# All The Mods - Help - -Documentation is currently work in progress, however check out [F.A.Q](faq.md) in the mean time. - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/help/backups.md b/docs/help/backups.md deleted file mode 100644 index ef3128a..0000000 --- a/docs/help/backups.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Backups -description: How to get and recover different backups -authors: - - ArcTrooper - - Bathsalts ---- - -# Backups - -## What should I backup? - -1. **options.txt** - - This contains most menu, volume, and video settings. -2. **keys.txt** - - This contains all your keybinds. -3. **Any configs you changed inside** `packInstall/configs` -???+ danger "DON'T copy and paste the entire configs folder" - Only backup the config files that you have *changed*. Copying the entire folder can corrupt your install if the configs are from a different pack version. -4. **A backup of your world(s)** - - See [below.](#restoring-a-world-backup) -5. **Journeymap Waypoints (optional)** - - These are located in `packinstall/journeymap/data/sp`. Copy the folder with the world you want to backup. - -## Restoring a World Backup - -**SimpleBackups** is a mod included in the client version of ATM, but *NOT* included in the server version of ATM. You must add it yourself or use your server host's built-in options. - -By default, it will save to `packInstall/simplebackups` with a zip file with your world's name. You can configure how often it does a backup at `/configs/simplebackups-common.toml`. **Default Interval**: Every 2 hours (120 minutes). - -### ATLauncher - -1. Close out of your modpack. -2. Click `Open Folder` and open the `simplebackups` folder. -![](img/backupsAT1.png) -3. **Copy** the zip file of the backup you want to restore **to your** `saves` **folder**. -4. Go to your `saves` folder and **delete** the world you want to restore -5. Open the zip file, then **drag** the folder inside, out to your `saves` folder. **Delete** the zip file -!!! failure "If the restore was unsuccessful, you may need to try an older backup before the issue occurred" - -### CurseForge - -1. **Close** completely out of the modpack. -2. **Right-click** on the ATM icon in your CurseForge modpack screen and click `Open Folder` -![](img/backupsCF1.png) ---- -3. **Open** `simplebackups` - -![](img/backupsCF2.png) - -4. **Open** the zip file that you want to restore. (They're labeled by the date created; the latest one is recommended.) -5. **Copy (Ctrl + C)** the folder inside, then return to your `saves` folder. -6. Back up your old world and **delete** it from this folder -7. **Paste (Ctrl + V)** the backup into `saves` -!!! failure "If the restore was unsuccessful, you may need to try an older backup before the issue occurred" - -> Simplebackups | [CurseForge](https://legacy.curseforge.com/minecraft/mc-mods/simple-backups) diff --git a/docs/help/commands.md b/docs/help/commands.md deleted file mode 100644 index bc5ea32..0000000 --- a/docs/help/commands.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Commands -description: Known useful commands for most of ATM servers ---- - -# Commands - -??? Info "Useful Minecraft Commands" - ## Minecraft - === "Player Commands" - ```title="Teleport To Spawn" - /spawn - ``` - ```title="Forge TPS Count" - /forge tps - ``` - === "Admin Commands" - ```title="Kill/Remove Item Entities" - /kill @e[type=minecraft:item] - ``` - ```title="Kill All Entities, Except Players" - /kill @e[type=!minecraft:player] - ``` - ```title="Clear Inventory" - /clear - ``` - -??? Info "Corail Tombstone" - ## Corail Tombstone - === "Player Commands" - ```title="Knowledge GUI" - /tbgui - ``` - ```title="Request Teleport To Player" - /tbrequestteleport - ``` - ```title="Teleport Binding (Like /sethome)" - /tbbind set 1-5 - /tbbind teleport 1-5 - ``` - ```title="Teleport to death position" - /tbteleport death - ``` - === "Admin Commands" - ```title="Modify Knowledge Points" - /tbknowledge - ``` - ```title="Restore Graves" - /tbrestoreinventory - ``` - ```title="Get last graves coordinates" - /tbshowlastgraves - ``` - ```title="Restore Graves From Player Backups" - /tbrcovery - ``` - -??? Info "Spark" - ## Spark - === "Player Commands" - ```title="Client Profiling" - /sparkc profiler --timeout 30 - ``` - ```title="Spark TPS Count" - /spark tps - ``` - ```title="Server Ping" - /spark ping - ``` - === "Admin Commands" - ```title="Server Profiling" - /spark profiler --timeout 30 - ``` - ```title="Server Health" - /spark health - /spark health --memory - /spark health --network - ``` - ```title="Tick Monitoring" - /spark tickmonitor - /spark tickmonitor --threshold - /spark tickmonitor --threshold-tick - /spark tickmonitor --without-gc - ``` - ```title="Spark Garbage Collection History" - /spark gc - ``` - ```title="Garbage Collection Monitor" - /spark gcmonitor - ``` - ```title="Spark Heap Summary" - /spark heapsummary - ``` - ```title="Spark Heap Dump" - /spark heapdump - ``` - ```title="Past Spark Activity/History" - /spark activity - ``` - !!! Tip "`--only-ticks-over 20` argument for profiling will record only ticks that's over 20 ticks that's considered problematic" - !!! Tip "`--thread *` for profiling can help record all threads that Spark may not pick up" - -??? Info "FTBChunks" - ## FTBChunks - === "Admin Commands" - ```title="Modifiy Claim Chunks Count" - /ftbchunks admin extra_claim_chunks - ``` - ```title="Modify Force Loaded Chunks Count" - /ftbchunks admin extra_force_load_chunks - ``` - ```title="Bypass Chunk Claims" - /ftbchunks admin bypass_claims - ``` - ```title="Unload All Forced Loaded Chunks" - /ftbchunks admin unload_everything - ``` - ```title="Unclaim All Chunks (All Team/Player Chunks)" - /ftbchunks admin unclaim_everything - ``` - -??? Info "FTBTeams/Party" - ## FTBTeams/Party - -??? Info "FTBQuests" - === "Admin Commands" - ```title="FTBQuests Edit Mode" - /ftbquests editing_mode true - ``` - -??? Info "Crash Utilities" - ## Crash Utilities - === "Admin Commands" - ```title="Clear Entities (Must be enabled)" - /cu callItemClear - ``` - ```title="Get world entities list" - /cu entities list - ``` - ```title="Teleport Player (Even Offline) to spawn" - /cu unstuck - ``` - -??? Info "Mahou Tsuaki" - ## Mahou Tsuaki - === "Player Commands" - ```title="Show/Hide Mahou Count" - /showmahou - ``` - === "Admin Commands" - ```title="MahouSet Morgan Damage" - /mahouset morgan @p 5000000 - ``` diff --git a/docs/help/configs.md b/docs/help/configs.md deleted file mode 100644 index 4b9eb2e..0000000 --- a/docs/help/configs.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Configs -description: What/Where are they? Customize your game! ---- - -# Configs - -Pack configs are usually located in the `config/` folder, though others may be in your `world/serverconfigs/` folder. - -!!! Warning "When editing configs, please make sure server / client is not running" - - For clients, it's safe to edit `world/serverconfigs/` while not in the world and or restarting entire client. - ---- - -## FTB - -### [FTB Essentials](https://legacy.curseforge.com/minecraft/mc-mods/ftb-essentials-forge) - -Provide a couple of **Bukkit** / **Spigot** _Essentials_ like commands. `/home`, `/back`, `/tpa`, `/warp`, etc. Commands can be enabled / disabled and configured, such as cool-downs and limits, even with [FTBRanks](#ftbranks). - -> **Config**: `world/serverconfig/ftbessentials.snbt` - -### [FTBRanks](https://legacy.curseforge.com/minecraft/mc-mods/ftb-ranks-forge) - -Includes ranks (_hence name_), is alike **Group Manager**, **EssentialsEX**, **PermX**, **LuckyPerms**, allowing you to setup custom / styled ranks for players that give additional command usages. - -More information can be found on FTB Wiki: [FTBRanks](https://feedthebeast.notion.site/FTB-Ranks-d56ec50cfa04412485ff0bf63d103b4d), [FTB Essentials](https://feedthebeast.notion.site/FTB-Essentials-f1650e409e91416d941d3167f9ec89f4) - -> **Config**: `world/serverconfig/ftbranks/ranks.snbt` - -## [No Fly Zone](https://legacy.curseforge.com/minecraft/mc-mods/no-fly-zone) - -In [ATM9](../atm9/README.md), a new mod was introduced to prohibit flight in certain dimensions. This can be disabled. - -> **Config**: `world/serverconfig/noflyzone.snbt` - -## F.A.Q - -??? Question "Can you make ATM ores minable by quarry?" - - By design, fake players are not allowed to mine ATM ores. This ruins the purpose of the ore being obtained naturally, thus did not come with a config to change. \ No newline at end of file diff --git a/docs/help/faq.md b/docs/help/faq.md deleted file mode 100644 index 76eb6f1..0000000 --- a/docs/help/faq.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: FAQ -description: Frequently Asked Questions ---- - -# FAQ - -This FAQ is put into 3 sections. - -- [Technical](#technical) -- [Servers](#servers) -- [Gameplay](#gameplay) - ---- - -**Context Keywords** - -- **Instance**: The specific modpack or profile folder in question. -- **Arguments**: Commands/Flags used with Java to help with performance (Most Garbage Collection). -- **Allocate**: The amount of ram assigned to minecraft. _By default it's always set to 4Gb or lower, and some modpack requires more._ - ---- - -## Technical - -* [Failed To Authenticate](#failed-to-authenticate). -* [Modpack Crashes (At Beginning)](#modpack-crashes-at-beginning). -* [World Crashing (Before / After)](#world-crashing-before-after). -* [Ticking Entity Or Block](#ticking-entity-or-block). - ---- - -### Failed To Authenticate - -??? Info - - Authentication errors can be caused by numerous reasons. TL;TD here's some things you can try/check. - - - Re-authenticate your account by logging out and back within your launcher. - - Restart launcher. - - Restart Network (Unplugging router/modem ("Internet Box(es)")). - - Are you using or have **Hamachi** installed? If installed but not using, this could be a culprit. - - IPv6 issues. - - Setting this Java argument to force IPv4 `-Djava.net.preferIPv4Stack=true` - - Disabling "Internet Protocol Version 6 (TCP/IPv6)" in/on Adapter Settings in Network and Sharing Center. - - Flushing DNS > Command Prompt > `ipconfig /flushdns` - - Firewall / DDoS protection (Modded MC can potentially flood network with packets considering to be an attack and blocking a specific server ip/inbound connections). - -### Modpack Crashes (At Beginning) - -??? Info - - Crashes can be caused by numerous of reasons, which can be frustrating to figure out exactly why you're crashing. - - - Check within launcher/instance settings there's enough ram allocated. (**8GB** / **8,192MB**). No more than (**12GB** / **12,288MB**). - - Check you're using the correct (_not latest_) version of **Forge** required for the pack, additionally [Java](java.md) - - Update GPU drivers, and ensure you're using your **Dedicated GPU**. - - If **AMD**, - - Go to [Official AMD Website](https://www.amd.com/en/support) and download / update GPU drivers. - - If **NVidia**, - - Go to **NVidia Control Panel**, Update Driver and go to **3D Settings**. - - Select **Program Settings** tab, and click **Add** - - **Sort By** by **Recently Used**, and select **Java**. :material-information-outline:{ title="OpenJDK, Adoptium, Amazon Corretto, Microsoft Java, Eclipse Temurin, GraalVM, Adoptium" } - - Repair Installation, and or delete **Minecraft** / **Forge** `libraries` folder. - - **CurseForge**: `%USERPROFILE%\curseforge\minecraft\Install` - - Repair Configs - - Delete `instance/config` & `instance/kubejs`folders. - - Download the pack files (not server) from **CurseForge** - - Inside the archived zip, copy the `overrides/config` and `overrides/kubejs` folder to your `instance` folder. - - Repair / Re-Install Profile (Pack). - - Not all launchers have this, therefor you may need to create another instance of the pack. - **Caution**: If you delete current instance, you may delete your single player worlds! Make sure you back them up. - -### World Crashing (Before / After) - -??? Info - - Crashing worlds can suck. Some of the most common, if non of the above fixed the issue. - - - Corrupted **Configs** - - Corrupted **Player Data** - - Corrupted **Chunks** - - [Ticking Entity Or Block](#ticking-entity-or-block) - - **Mods** that's being problematic (Bugs, or Additional mods you've installed). - - Some things you can try if, - - - **Delete** `saves?/world/serverconfigs/` folder. - - **Note**: If a world crash / fail to properly save, `serverconfigs` can potentially get corrupted. - - Repair Configs - - **Delete** `instance/config` & `instance/kubejs`folders. - - Download the **pack files** (_not server_) from **CurseForge** - - Inside the archived zip, copy the `overrides/config` and `overrides/kubejs` folder to your `instance` folder. - - Upload the most recent crash report prior to crashing within `instance/crash-reports/` folder to [MC Logs](https://mclo.gs) - - MCLogs can sometimes point of the issue within the crash report. - - -### Ticking Entity Or Block - -??? Info - - Ticking entities or blocks occurs by what they might've interacted with, loaded / done incorrectly, or perhaps even an un/known discovered bug. - - Lucky there's a trick you _could_ do to possible fix this, if not manually. - - - Locate & Open `saves?/world/serverconfig/forge-server.toml` with any text editor. - - For **Block Entities**: Set `removeErroringBlockEntities` to `true`. - - For **Ticking Entities**: Set `removeErroringEntities` to `true`. - - Load world, save `/save-all` & `/stop`, and set back `false` - - **Caution**: This should **NOT** be left on for long as it can cause issues removing things if lag is created. - - - Upload the most recent crash report prior to crashing within `instance/crash-reports/` folder to [MC Logs](https://mclo.gs). - - It can help identify the source of the ticking entity, or at-least what's ticking and from what mod and the position. - - If you don't have the location of this entity in crash report, or not sure of the exact player position that's near it, - - Worst cast scenario, removing one of the mods involved in the crash, loading the world once and adding the mod back _sometimes_ fixes the issue. Make sure you **backup** your world prior. - - Submit crash report (_MC Logs_) link to the us via GitHub or Discord. - - If have the location of this ticking entity, download an **NBT** editor: [NBT Explorer](https://github.com/jaquadro/NBTExplorer) or [NBT Studio](https://github.com/tryashtar/nbt-studio), as it will be handy. - - **Player** - - With **NBT** editor of choice, open your `world/playerdata/.dat` file. You can use [Minecraft UUID](https://mcuuid.net/) to figure out player **UUID**. Open up the player tree and then locate player `X, Y, Z` coordinates. - - **Coordinates** - - Use this [Minecraft Coordinate Calculator](https://minecraft.tools/en/coordinate-calculator.php) and input the **Block Position**. You're then given your `X, and Z` **Chunk Section**, along with your **Region** information / file `.mca`. - - With **NBT** editor, Open your the **Region** `.mca` file in `world/regions`, or `world/entities` if it's mod entity. Look for `Chunk [-,-] @ World (X,Z)` where `World (X, Z)` is the **Chunk Section**. - - Note: **Nether** is in **DIM-1** and **End** is in **DIM1** folder. Other dimensions would be in the `dimensions` folder respectively. - - After chunk is found, open the tree and look for / through entities for the crashing entity. - - **Note**: You can also use the **Search** function above and search for the **Value** of the entity name. - - **Note #2**: Searching will search within the last location / tree index your mouse clicked. - - If all still fails, feel free to send us your log or crash report from [MC Logs](https://mclo.gs) to our Github or Discord - ---- - -## Servers - ---- - -## Gameplay - -Visit the FAQ of your specific pack to view it's FAQ! - ---- \ No newline at end of file diff --git a/docs/help/java.md b/docs/help/java.md deleted file mode 100644 index dbaa199..0000000 --- a/docs/help/java.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Java -description: Get the right Java you need! ---- - -# Java - -### Java Versions - -- Minecraft **<= 1.15** | [Java 8](https://adoptium.net/?variant=openjdk8&jvmVariant=hotspot) | `sudo apt install openjdk-8-jdk` -- Minecraft **1.16** | [Java 8](https://adoptium.net/?variant=openjdk8&jvmVariant=hotspot) OR [Java 11](https://adoptium.net/?variant=openjdk11&jvmVariant=hotspot) | `sudo apt install openjdk-11-jdk` -- Minecraft **1.17** | [Java 16](https://adoptium.net/?variant=openjdk16&jvmVariant=hotspot) | `sudo apt install openjdk-16-jdk` -- Minecraft **1.18+** | [Java 17](https://adoptium.net/?variant=openjdk17&jvmVariant=hotspot) | `sudo apt install openjdk-17-jdk` - -??? Note "Other Java Download Links" - [Amazon Corretto](https://aws.amazon.com/corretto/), [Azul Zulu](https://www.azul.com/downloads/?package=jdk#zulu), or [Oracle JDK](https://www.oracle.com/java/technologies/downloads/archive/) - ---- - -### Java Arguments - -These can help both server and client with performance in, - -- Reducing Ram Usage. (_GC will clean up more efficiently_) -- Reduced Lag Spikes. (_GC will clean more frequently, reducing large lag spikes_) - -``` title="Java 8+ Arguments" --XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=32M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -``` - ---- - -??? Info "Java Arguments Explanation" - - - `-Xms, -Xmx` - - : Places boundaries on the heap size to increase the predictability of garbage collection. The heap size is limited in replica servers so that even Full GCs do not trigger SIP retransmissions. **-Xms** sets the starting size to prevent pauses caused by heap expansion. - - - `UseG1GC` - - : Use the Garbage First (G1) Collector. - - - `+ParallelRefProcEnabled` - - : Optimizes the GC process to use multiple threads for weak reference checking. Not sure why this isn't default... - - - `MaxGCPauseMillis=200` - - : This setting controls how much memory is used in between the Minimum and Maximum ranges specified for your New Generation. This is a "goal" for how long you want your server to pause for collections. 200 is aiming for at most loss of 4 ticks. This will result in a short TPS drop, however the server can make up for this drop instantly, meaning it will have no meaningful impact to your TPS. 200ms is lower than players can recognize. In testing, having this value constrained to an even lower number results in G1 not recollecting memory fast enough and potentially running out of old gen triggering a Full collection. Just because this number is 200 does not mean every collection will be 200. It means it can use up to 200 if it really needs it, and we need to let it do its job when there is memory to collect. - - - `+UnlockExperimentalVMOptions` - - : Needed for some the below options - - - `+DisableExplicitGC` - - : Many plugins think they know how to control memory, and try to invoke garbage collection. Plugins that do this trigger a full garbage collection, triggering a massive lag spike. This flag disables plugins from trying to do this, protecting you from their bad code. - - - `+AlwaysPreTouch` - - : **AlwaysPreTouch** gets the memory setup and reserved at process start ensuring it is contiguous, improving the efficiency of it more. This improves the operating systems memory access speed. Mandatory to use Transparent Huge Pages. - - - `G1NewSizePercent` - - : These are the important ones. You now can specify percentages of an overall desired range for the new generation. With these settings, we tell G1 to not use its default 5% for new gen, and instead give it 40%! **Minecraft has an extremely high a memory allocation rate, ranging to at least 800 Megabytes a second on a 30 player server! And this is mostly short-lived objects (Block Position).** - - - `G1MaxNewSizePercent` - - : Percentage (0-100) of the heap size to use as default maximum young gen size. - - - `G1HeapRegionSize` - - : Default is auto calculated. SUPER important for Minecraft, especially 1.15, as with low memory situations, the default calculation will in most times be too low. Any memory allocation half of this size (4MB) will be treated as "Humongous" and promote straight to old generation and is harder to free. If you allow java to use the default, you will be destroyed with a significant chunk of your memory getting treated as Humongous. - - - `G1ReservePercent` - - : MC Memory allocation rate in up-to-date versions is really insane. We run the risk of a dreaded "to-space exhaustion" not having enough memory free to move data around. This ensures more memory is waiting to be used for this operation. Default is 10, so we are giving another 10 to it. - - - `G1HeapWastePercent` - - : Amount of space, expressed as a percentage of the heap size, that G1 is willing not to collect to avoid expensive GCs. - - - `G1MixedGCCountTarget` - - : Default is 8. Because we are aiming to collect slower, with less old gen usage, try to reclaim old gen memory faster to avoid running out of old. - - - `InitiatingHeapOccupancyPercent` - - : Percentage of the (entire) heap occupancy to start a concurrent GC cycle. GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap and not just one of the generations, including G1, use this option. A value of 0 denotes 'do constant GC cycles'. The default value is 45. - - - `G1MixedGCLiveThresholdPercent` - - : Controls when to include regions in Mixed GC's in the Young GC collection, keeping Old Gen tidy without doing a normal Old Gen GC collection. When your memory is less than this percent, old gen won't even be included in 'mixed' collections. Mixed are not as heavy as a full old collection, so having small incremental cleanups of old keeps memory usage light. - - : Default is 65 to 85 depending on Java Version, we are setting to 90 to ensure we reclaim garbage in old gen as fast as possible to retain as much free regions as we can. - - - `G1RSetUpdatingPauseTimePercent` - - : Default is 10% of time spent during pause updating RSets, reduce this to 5% to make more of it concurrent to reduce pause durations. - - - `SurvivorRatio` - - : Because we drastically reduced **MaxTenuringThreshold**, we will be reducing use of survivor space drastically. This frees up more regions to be used by Eden instead. - - - `+PerfDisableSharedMem` - - : Causes GC to write to file system which can cause major latency if disk IO is high -- See [JVM MMAP Pause](https://www.evanjones.ca/jvm-mmap-pause.html) - - : **Note**: This argument can prevent **VisualVM** from detecting the Java process. - - - `MaxTenuringThreshold` - - : Minecraft has a really high allocation rate of memory. Of that memory, most is reclaimed in the eden generation. However, transient data will overflow into survivor. Initially played with completely removing Survivor and had decent results, but does result in transient data making its way to Old which is not good.Max Tenuring 1 ensures that we do not promote transient data to old generation, but anything that survives 2 passes of Garbage Collection is just going to be assumed as longer-lived. - - : Doing this greatly reduces pause times in Young Collections as copying data up to 15 times in Survivor space for a tenured object really takes a lot of time for actually old memory. Ideally the GC engine would track average age for objects instead and tenure out data faster, but that is not how it works. - - - : Considering average GC rate is 10s to the upwards of minutes per young collection, this does not result in any 'garbage' being promoted, and just delays longer lived memory to be collected in Mixed GC's. - - - `+UseLargePagesInMetaspace` - - : For Large Pages -- It's even more important to use -Xms = -Xmx! Large Pages needs to have all the memory specified for it, or you could end up without the gains. This memory will not be used by the OS anyway, so use it. Additionally, use these flags (Metaspace is Java 8 Only, don't use it for Java7): - - - `+UseTransparentHugePages` - - : Controversial feature but may be usable if you can not configure your host for real HugeTLBFS. Try adding, but it's extremely important you also have AlwaysPreTouch set. Otherwise, THP will likely hurt you. We have not measured how THP works for MC or its impact with AlwaysPreTouch, so this section is for the advanced users who want to experiment. \ No newline at end of file diff --git a/docs/help/lag.md b/docs/help/lag.md deleted file mode 100644 index 6556d7a..0000000 --- a/docs/help/lag.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Lag / Profiling -description: Find and Fix server lag, and or FPS issues ---- - -# Lag - -For identifying Lag sources/causes most of our packs have Spark and Observable in them by Default. - -### [Spark Profiler](https://spark.lucko.me/docs) - -Normal players also have access to the command `/spark tps` & `/forge tps` and that gives a general indication of any potential lag issues that might need investigating. - -**For Spark**, players in SP worlds with cheats enabled, or Server OPs can use the command `/spark profiler --timeout 180` to get a 3 minute snapshot of the server and anything that could be causing TPS issues. You can look at the URL returned by the mod to see an interactive online view of all server threads. -Users can also use the command `/spark profiler --only-ticks-over 100 --timeout 60`, to identify intermittent lag spikes. - -!!! Note - For profiling client side FPS issues, use the `sparkc` command instead using same arguments above. - ---- - -### [Observable](https://www.curseforge.com/minecraft/mc-mods/observable) - -Observable has the same permission requirements, but users need to set a keybind in their Keybinds settings to open the UI, from there click the profile TPS button and wait for it to complete, then depending on the mc version, you will either get a url, or an in-game table listing what blocks/entities are costing the most TPS, it will also visually highlight blocks with a spectrum color coding from **Green** to **Red**, with things colored in red generally being the worst for performance. - -Observable is an in-game profiler that can be used by anyone (1.20+, enabled by default in ATM9 and _must create a keybind_). In order to use the "Visit" button on the web page, you _must be op_. - -### [Crash Utilities](https://legacy.curseforge.com/minecraft/mc-mods/crash-utilities) (Item Clear) - -By default, **Crash Utilities** comes with most of our packs, though one feature **Item Clear** is disabled. It's a very handy feature to have enabled with packs containing farms and automation to prevent massive entity leaks, which causes lag & crashes. This can keep your server entity count low for better performance. - -To enable, locate and open `world/serverconfigs/crashutilities-server.toml`. Very top section, set `enabled` to `true`. The `timer` is the amount of time in minutes entities will be checked, followed by an Item Clear chat announcement when the entities goes over the `maximum` threshold. - -!!! Warning "When editing configs, please make sure server / client is not running" - - For clients, it's safe to edit `world/serverconfigs/` while not in the world and or restarting entire client. - - -### Useful Commands - -??? Note "General Commands" - - ``` title="Kill Item Entities (Or Specific Entity)" - /kill @e[type=minecraft:item] - ``` - Command may need to be executed more than once to clear all entities. Additionally, the **Crash Utilities** entities list command can be used to locate entities before they're cleared. - ``` title="Kill Everything, Except Players" - /kill @e[type=!minecraft:player] - ``` - -??? Note "Spark" - ``` title="Run Server Side Profiler (TPS Issues)" - /spark profiler --timeout 30 - ``` - ``` title="Run Client Side Profiler (FPS/TPS Issues)" - /sparkc profiler --timeout 30 - ``` - - !!! Tip "`--only-ticks-over 20` argument will record only ticks that's over 20 that's considered problematic." - !!! Tip "`--thread *` can help record all threads Spark may not pick up." - -??? Note "Crash Utilities Commands" - ``` title="Entities List" - /cu entities list - ``` - ``` title="Item Clear (Must Be Enabled)" - /cu callItemClear - ``` - ``` title="Teleport Player To Spawn (Even Offline Player(s))" - /cu unstuck - ``` - ``` title='Open Player Inventory (Even Offline Player(s))' - /cu inventory - ``` - - diff --git a/docs/help/server/.pages b/docs/help/server/.pages deleted file mode 100644 index 1525bab..0000000 --- a/docs/help/server/.pages +++ /dev/null @@ -1,4 +0,0 @@ -nav: - - README.md - - "AMP Server Setup": amp.md - - ... \ No newline at end of file diff --git a/docs/help/server/README.md b/docs/help/server/README.md deleted file mode 100644 index fa470bf..0000000 --- a/docs/help/server/README.md +++ /dev/null @@ -1,170 +0,0 @@ -# Server - -This guide will explain how to setup an AllTheMods server locally, or with a server host. - ---- - -## Prerequisites - -- [x] Server with at-least **8GB**+ RAM (_As required for most ATM packs_). -- [x] CPU that's atleast **3.5Ghz** of speed. -- [x] Specific [Java](../java.md) version based on the pack **Minecraft** version. - ---- - -## Installation - -- Download modpack **Server-Files** from **CurseForge**. -- Extract **Server-Files** to a folder. - -!!! Warning "If you've a 3rd party Anti-Virus installed, exclude the folder the files will be extracted too, as files may get remove or corrupted after extracting." - ---- - -### Java - -If you have multiple [Java](../java.md) versions installed, the default `java -version` will be used, which may not be the correct version based on the **Minecraft** version. There's 3 solutions, - -- Edit the server script, changing `java` to correct java binary path. - - Ex: `"C:\Program Files\Java\jre-17\bin\java.exe" @user_jvm_args.txt ...` -- Remove old / add the correct **java/bin** path to **System Environment Variables** > Path -- **Linux**, you can re-configure [Java](../java.md) using `sudo update-alternatives --config java` -- Uninstall all [Java](../java.md) versions except the one being used. - -!!! Note "If you've installed [Java](../java.md), you may need to restart OS." - ---- - -### Local Installation - -- Extract **Server-Files** to a folder. -- **Window**: Do not unzip files under **OneDrive** or any other cloud folder, as this can potentially remove / corrupt files. -- **Linux**: Ensure server folder has read/write permission, and script has execute permission, - - To avoid any _read/write_ permission errors, install server under `/home//` folder. - - Run once: `sudo chmod +x startserver.sh`. -- Starting Server: - - **Windows**: Execute `startserver.bat` - - **Linux**: Execute `./startserver.sh` - -After running, you're required to accept [Minecraft Eula](https://www.minecraft.net/en-us/eula) in the `eula.txt` file. - -Make any changes necessary to `server.properties`, `configs`, and or `world/serverconfigs`, and run `startserver.bat/sh` again to start the server. - -???+ Warning - Many guides tell you to edit `server-ip` or `server-port`. In most cases you **DO NOT** need to edit these, especially `server-ip`. This can prevent your server from starting. - -??? Note "There's no `startserver.bat/sh` script?" - Install **Forge** first, - - - `java -jar forge-installer*.jar --installServer` - - You will then instead `run.bat/sh` to start server. - - ??? Tip "There's no `run.bat/sh`?" - Expecting this is an older Forge version, you'll need to create a script that launches Forge. - ``` title='run.bat/sh' - java -Xms4G -Xmx8G -jar forge-*universal.jar - ``` - -??? Note "How to allocate RAM or add Arguments?" - Allocating RAM and or adding Arguments are applied within `usr_jvm_args.txt`. Older versions of **Forge** will require adding arguments in the script file, if that file doesn't exist. - -??? Note "How To Import A World?" - Upload world folder to server folder. Make sure the world folder is named `world`. - -!!! Tip "Performance Tips: Check out [Lag / Profiling](../lag.md)" - ---- - -### Server Host Installation - -Most server host has a one-click server installer you can use, otherwise - -- If possible, setup a fresh **Forge** server based on the current **Forge** version of the pack. - - If host has no **Forge** installer, read [Server Host Custom Jar](#server-host-custom-jar) -- Upload extracted **Server-Files** to host, via **FTP** or **STFP**. - - To connect to **FTP**/**SFTP**, you could use a client like [FileZilla](https://filezilla-project.org/). - - If there's no **FTP**/**SFTP**, you may be able to upload the **Server-Files** zip, and extract on server host via their online **File Manager**. - - ---- - -## Server Host Custom Jar - -If server host requires a `.jar` file, later **Forge** versions cannot be ran directly. If older, you can upload and use the `forge-*universal.jar` as custom jar. Extract & Upload **Server-Files** to main server folder. **Otherwise**, - -- Download [ServerStarter](https://github.com/BloodyMods/ServerStarter/releases) jar, then upload to main server folder. Use this as the custom jar. -- Download pack **Server-Files** from **CurseForge**, extract, and upload **ALL** to main server folder. -- Create a file named `server-setup-config.yaml`, and copy / paste the config example below. - -Modifiy config for pack if necessary, specifically the `mcVersion` and `loaderVersion`, and place config in server root then start server as normal. - -??? Info "Config Example | ATM9" - - **Highlighted lines are important to be configured** - - ```yaml title='server-setup-config.yaml' hl_lines="4 5 7 8 30" - # Version of the specs, only for internal usage if this format should ever change drastically - _specver: 2 - modpack: - name: ATM9 - description: All The Mods 9 - install: - mcVersion: 1.20.1 - loaderVersion: 47.2.19 - installerUrl: "https://files.minecraftforge.net/maven/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/forge-{{@mcversion@}}-{{@loaderversion@}}-installer.jar" - installerArguments: - - "--installServer" - modpackFormat: zip - baseInstallPath: ~ - checkFolder: true - installLoader: true - connectTimeout: 30 - readTimeout: 30 - launch: - crashLimit: 10 - maxRam: 8 - minRam: 4 - crashTimer: 60min - preJavaArgs: ~ - startFile: "forge-{{@mcversion@}}-{{@loaderversion@}}.jar" - startCommand: - - "@user_jvm_args.txt" - - "@libraries/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/{{@os@}}_args.txt" - - "nogui" - forcedJavaPath: ~ - supportedJavaVersions: [17] - ``` - - - `mcVersion`: Minecraft Version - - `loaderVersion`: Forge Version - - `supportedJavaVersions`: Supported Java Version(s) - ---- - -## Updating - -Updating ATM servers is pretty simple. There's 3 ways you can accomplish this. - -!!! Danger "**BACKUP** world before proceeding." - -### **Automatic** - -1. If you have a server host with a modpack installer, usually you can do a one-click update within your control panel. - -### **Manually** (2 methods) - -1. Backup any modified configs or kubejs scripts, _if any_, to be replaced later. - - Download **Server Files** from **CurseForge** - - Delete `kubejs`, `defaultconfigs`, `mods`, and `config` folder. - - If server forge version is different, delete `libraries` folder, and copy over new `startserver.bat/sh`, & `forge-installer.jar` _if exists_. - - Extract the deleted folders from **Server Files** into your server folder. - -2. Download **Server Files** from **CurseForge**. - - Extract **Server Files** to a new folder. - - Copy `world`, `local` folder, `server.properties`, & `eula.txt` to new server folder. - - If `journeymap` folder exist, copy over aswell. - - _Copy over any modified server configs/kubejs scripts_ - ---- - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/help/server/amp.md b/docs/help/server/amp.md deleted file mode 100644 index 64e5384..0000000 --- a/docs/help/server/amp.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -title: AMP Server Setup -description: Guide on how to setup an atm server on AMP -authors: - - Bathsalts (Original Author) - - ArcTrooper (Editor) ---- - -???+ warning - This guide is outdated as of `6/1/24`. Guide will be updated to AMP's new UI. - -## AMP Install Guide - -This is a guide for installing ATM9 (and possibly other packs) on CubeCoderz's AMP gameserver hosting software! - -???+ info - The current version of AMP as of the creation of this guide is **2.5.0.4**. As the software is updated, the exact location of settings may change. - -???+ warning - This guide is currently hosted by the official ATM website/Discord. If found anywhere else please advise them to delete it and instead link to this [official version](https://allthemods.github.io/alltheguides/help/server/). - -???+ note "This guide assumes:" - - You have fully installed the AMP software and have successfully gained access to the web based GUI. If you need help installing the base software please refer to the [CubeCoderz Documentation](https://github.com/CubeCoders/AMP/wiki). - - You have already downloaded the latest version of the [ATM Pack ServerFiles](https://github.com/AllTheMods) and have unzipped them into a folder. - ---- - -### Creating a New Instance. - -![](img/ss1.png) - -- Under **Select Application**, choose **Minecraft Java Edition**. -- Under **Friendly Name**, pick a name to reference the server such as **ATM9**. -- Under **After Creation**, pick **Do Nothing**. -???+ note - If you do not want the instance to start every time AMP is started, uncheck the **Start Instance on Boot** option. This is **on** by default. -- Select **Create Instance** - -![](img/ss2.png) - ---- - -### Configuring Server Settings - -- Choose **Manage** from the newly created instance - -![](img/ss3.png) - -- On the left menu, select **Configuration** and then **Server Settings** - -![](img/ss4.png) - -Change the following: - -- **Server type**: `Forge` -- **Forge Version**: Change to current Forge version. - - For this example the current version is `47.2.20`. -- **View Distance**: `8` -- **Simulation Distance**: `6` -- **Use Synchronous IO**: `off` - -![](img/ss5.png) - ---- - -- On the left menu, select **Security and Privacy** - -Change the following: - -- **Require Session IP Stickiness**: `off` - -![](img/ss6.png) - ---- - -- On the left menu, select **Performance and Limits** - -Change the following: - -- **Max View Distance**: `8` -- **Enable Sleep Mode**: `off` -- **Stop Timeout**: `60000` -- **Backup Count Limit**: `3` - -![](img/ss7.png) - ---- - -On the left menu, select **Monitoring and Metrics** - -Change the following: - -- **Console Scrollback Period**: `120` - -![](img/ss8.png) - ---- - -On the left menu, select **Java and Memory** - -Change the following: - -- **Memory Limit (MB)**: Min: `6144`. Max: `16384` -!!! warning "Anything over `16384` requires changing the GC settings and is beyond the scope of this guide." -- **Additional java options**: Paste in the server java arguments from the `user_jvm.txt` without the first two lines `xmx` or `xms` - -!!! example "" - ```-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1``` - -- **Java Version**: `Java 17` -???+ note - If `Java 17` is not in the dropdown list, you need to close AMP completely, install `Java 17` to the server, then restart AMP. - -![](img/ss9.png) - ---- - -On the left menu, select **Gameplay and Difficulty** - -Change the following: - -- **Op permission level**: `3:Kick/ban/op players` - - This is changed to keep OP users from running spark report from in-game. Spark reports should only be done from the server console directly. -- **Spawn Protection Radius**: `1` -- **Allow PvP**: `on` -- **Allow Flight**: `on` -- **Allow Command Blocks**: `on` -- **Player idle timeout**: `0` - - Can be done via mods instead or you can change this setting to your preference, but can lead to 'ghost players' on occasion stuck in the AMP menus as showing online after they have been kicked. -- **Use Whitelist**: Don't change from default `off` - - Highly recommended to use this feature, but only after the server is successfully running -- **Max tick Time**: `-1` - -![](img/ss10.png) - ---- - -### Installing Server Forge - -Click the **Back** arrow at the top of the left menu - -![](img/ss11.png) - -Select **Console** from the left menu and then click **Update** from the middle screen. - -![](img/ss12.png) - -Wait while the server downloads and installs the selected forge version. - -!!! note "This can take several minutes depending on your server specs and internet connection" - -When it finishes it should say **The server installed successfully**; if it does not please doublecheck the above settings and verify you have selected the appropriate Forge Version. - -![](img/ss13.png) - ---- - -### Importing the Server Files - -On the left menu, select **File Manager** - -The easiest way to import the server files is to unzip the files and create a new zip - -- To remove the double-wrapping (zipping a folder instead of a group of files) of the files: - - **Extract** the serverfiles you downloaded from CurseForge into a folder. - - Go into the folder inside that folder and then select **all the files** and re-zip. - -I recommend using **7zip** as this is what I have used for testing -!!! warning "Make sure you save as .zip and not .7z" - -![](img/ss14.png) - ---- - -Drag the newly created zip file into the **File Manager window**. Once it finishes you may need to refresh the page to see the file in the file list. - -![](img/ss15.png) - ---- - -Right click the .zip file in the list and chose **Extract Here**. - -!!! info "This may take several minutes depending on your server specs and storage speed." - -Once it finishes you may need to **refresh** the page to see the newly extracted files populated in the list. - -![](img/ss16.png) -![](img/ss17.png){align=right} - ---- - -### Starting the Server - -Select **Console** from the left menu and click **Start**. - -![](img/ss18.png) - -- Accept the EULA that pops up - -![](img/ss19.png) - ---- - -The server will now start. This can take several minutes depending on your server specs and storage speed. - -???+ note - Errors are normal and to be expected as long as it continues loading. Be patient as the first startup usually takes time while it creates all the needed files, configs, folders, etc. - -You will know it is finished when the notification window in the bottom right disappears and the server says **Dedicated server took XXX.XX seconds to load**. - -![](img/ss20.png) - ---- - -It is recommended after the first startup to stop the server, using the red **Stop** button at the top, and then start it again. - -- Try to connect to the server and verify operation -- If you need to add server admin mods you would place them into the **mods** folder under **File Manager** while the server is ***stopped***; you can edit files directly from within the file manager in AMP for making changes to the txt config files. -!!! danger "Only edit, add, or remove files WHILE THE SERVER IS STOPPED!" - -### Changing Server Properties - -All settings within `server.properties` are in independent tabs in the various settings in AMP and it is recreated every server startup. - -!!! warning "CHANGES TO `server.properties` FILE WILL NEVER SAVE!" - -???+ example "Changing Server Type" - If you need to edit the world type for example, to run a **Skyblock** server, you would change it under `Configuration > Server Settings > World Type`. - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [CubeCoders: AMP](https://cubecoders.com/AMP) diff --git a/docs/legacy/.pages b/docs/legacy/.pages deleted file mode 100644 index 785c424..0000000 --- a/docs/legacy/.pages +++ /dev/null @@ -1,11 +0,0 @@ -nav: - - README.md -# - All The Spells - Spellbound: atms - - All The Mods - Slice Of Pie 2: atmslop2 - - All The Mods - Slice Of Pie: atmslop - - All The Mods 5: atm5 - - All The Mods 4: atm4 - - All The Mods 3: atm3 - - All The Mods 2: atm2 - - All The Mods 1: atm1 - - All The Mods 0: atm0 \ No newline at end of file diff --git a/docs/legacy/README.md b/docs/legacy/README.md deleted file mode 100644 index 4e058dc..0000000 --- a/docs/legacy/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# All The Mods - Legacy - -Legacy (Old) ATM packs that's no longer being maintained. - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) diff --git a/docs/legacy/atm0/README.md b/docs/legacy/atm0/README.md deleted file mode 100644 index 64e3d29..0000000 --- a/docs/legacy/atm0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ATM0 - -> All The Mods 0 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-0) | [GitHub](https://github.com/AllTheMods) \ No newline at end of file diff --git a/docs/legacy/atm1/README.md b/docs/legacy/atm1/README.md deleted file mode 100644 index 0815d89..0000000 --- a/docs/legacy/atm1/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ATM1 - -> All The Mods 1 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods) | [GitHub](https://github.com/AllTheMods/ATM-1) diff --git a/docs/legacy/atm2/README.md b/docs/legacy/atm2/README.md deleted file mode 100644 index bac16d5..0000000 --- a/docs/legacy/atm2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# ATM2 - -> All The Mods 2 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-2) | [GitHub](https://github.com/AllTheMods/ATM-2) \ No newline at end of file diff --git a/docs/legacy/atm3/README.md b/docs/legacy/atm3/README.md deleted file mode 100644 index df01f61..0000000 --- a/docs/legacy/atm3/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods 3 - -> All The Mods 3 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-3-remix) | [GitHub](https://github.com/AllTheMods/ATM3-Remix) \ No newline at end of file diff --git a/docs/legacy/atm3/expert/README.md b/docs/legacy/atm3/expert/README.md deleted file mode 100644 index 19dbaf3..0000000 --- a/docs/legacy/atm3/expert/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods 3 - Expert - -> All The Mods 3 - Expert | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-3-expert) | [GitHub](https://github.com/AllTheMods/ATM3-Expert) \ No newline at end of file diff --git a/docs/legacy/atm3/remix/README.md b/docs/legacy/atm3/remix/README.md deleted file mode 100644 index 3e77840..0000000 --- a/docs/legacy/atm3/remix/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods 3 - Remix - -> All The Mods 3 - Remix | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-3-remix) | [GitHub](https://github.com/AllTheMods/ATM3-Remix) diff --git a/docs/legacy/atm4/README.md b/docs/legacy/atm4/README.md deleted file mode 100644 index a98683a..0000000 --- a/docs/legacy/atm4/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods 4 - -> All The Mods 4 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-4) | [GitHub](https://github.com/AllTheMods/ATM4) \ No newline at end of file diff --git a/docs/legacy/atm5/README.md b/docs/legacy/atm5/README.md deleted file mode 100644 index 734b96d..0000000 --- a/docs/legacy/atm5/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods 5 - -> All The Mods 5 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-5) | [GitHub](https://github.com/AllTheMods/ATM-5/) \ No newline at end of file diff --git a/docs/legacy/atmslop/README.md b/docs/legacy/atmslop/README.md deleted file mode 100644 index 55d644c..0000000 --- a/docs/legacy/atmslop/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods - Slice Of Pie - -> All The Mods - Slice Of Pie | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-slice-of-pi) | [GitHub](https://github.com/AllTheMods/SLOP-slice-of-pie) \ No newline at end of file diff --git a/docs/legacy/atmslop2/README.md b/docs/legacy/atmslop2/README.md deleted file mode 100644 index 43e3da8..0000000 --- a/docs/legacy/atmslop2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# All The Mods - Slice Of Pice 2 - -> All The Mods - Slice Of Pie 2 | [CurseForge](https://legacy.curseforge.com/minecraft/modpacks/all-the-mods-slice-of-pi2-atm-slop2) | [GitHub](https://github.com/AllTheMods/SLOP2-slice-of-pie-2) \ No newline at end of file diff --git a/docs/misc/README.md b/docs/misc/README.md deleted file mode 100644 index 02198b4..0000000 --- a/docs/misc/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Miscellaneous - -Content that doesn't fit in other places, or have similarities with all packs. - -> All The Mods | [GitHub](https://github.com/AllTheMods) | [Discord](https://discord.com/invite/allthemods) | [Akliz Server Hosting](https://www.akliz.net/allthemods) \ No newline at end of file diff --git a/extensions/external_links_md_extension.py b/extensions/external_links_md_extension.py deleted file mode 100644 index 4330536..0000000 --- a/extensions/external_links_md_extension.py +++ /dev/null @@ -1,64 +0,0 @@ -from typing import List -from urllib.parse import urlparse - -import markdown -from mkdocs.config.defaults import MkDocsConfig - - -class ExternalLinksTreeProcessor(markdown.treeprocessors.Treeprocessor): - """ - Adds target="_blank" and rel="noopener" to external links. - """ - - def __init__(self, md, ignore_domains: List[str]): - super().__init__(md) - # convert to set for faster lookup - self.ignore_domains = set(ignore_domains) - - def run(self, root): - for element in root.iter(): - if element.tag == "a": - href = element.get("href", "") - - # parse the href and check if it's an absolute URL with http or https scheme - parsed_url = urlparse(href) - - if parsed_url.scheme in ["http", "https"]: - # remove port, if present - domain = parsed_url.netloc.split(":")[0] - - # skip if the domain is in the ignore list - if domain in self.ignore_domains: - continue - - element.set("target", "_blank") - element.set("rel", "noopener") - - -class ExternalLinksExtension(markdown.Extension): - def __init__(self, **kwargs): - self.config = { - "ignore_domains": [[], "List of domains to ignore"], - } - super(ExternalLinksExtension, self).__init__(**kwargs) - - def extendMarkdown(self, md: markdown.Markdown): - ignore_domains = self.getConfig("ignore_domains", []) - if not isinstance(ignore_domains, list): - raise ValueError("'ignore_domains' config must be a list") - - md.treeprocessors.register( - ExternalLinksTreeProcessor(md, ignore_domains), "external_links", -1000 - ) - - -def on_config(config: MkDocsConfig, **kwargs): - # a list of domains to ignore - # WARNING: requires re-running `mkdocs serve` when changed - IGNORE_DOMAINS = ["example.com"] - - # inject the markdown extension - config.markdown_extensions.append( - ExternalLinksExtension(ignore_domains=IGNORE_DOMAINS) - ) - return config \ No newline at end of file diff --git a/giscus.json b/giscus.json deleted file mode 100644 index 77ada63..0000000 --- a/giscus.json +++ /dev/null @@ -1 +0,0 @@ -{ "defaultCommentOrder": "newest" } \ No newline at end of file diff --git a/guides/biggerreactors/index.html b/guides/biggerreactors/index.html new file mode 100644 index 0000000..736a35e --- /dev/null +++ b/guides/biggerreactors/index.html @@ -0,0 +1,12 @@ + Bigger Reactors - All The Guides

Bigger Reactors

Reactors are the primary multi-block of Bigger Reactors. Loosely inspired by the real-life RBMK design, reactors may be used as either a power generator (in Passive mode) or as a heat source (in Active mode). Reactors consume and produce various Fuel and Waste products, and are highly customizable.

As of Bigger Reactors 0.5.2, the smallest possible reactor size is 3 × 3 × 3. With the default config, reactors may be built as large as 128 × 128 × 192, however this may be changed to an absolute maximum of 192 × 192 × 256.

Components

Required

The following components are the bare minimum required to construct any type of reactor.

  • Reactor Terminals: are the heart of your reactor.
  • Reactor Casings: make up the frame and walls of your reactor.
  • Fuel Rods: are where Fuel and Waste are contained.
  • Control Rods: are used to maintain control over the reaction.
  • Access Ports: are used to insert Fuel and extract Waste.

Type-Specific

Certain components may only be used with a specific type of reactor, and cannot be used together in the same reactor.

The first type of reactor are Passive Reactors. These output the energy they generate directly as RF, which may be used by other machines.

  • Power Taps are where you extract power from a passive reactor.
    The second type of reactor are Active Reactors. These convert the energy they generate into heat, which is used to heat up fluids.
  • Coolant Ports are used to insert “cold” fluids (such as water) and extract “hot” fluids (such as steam).
  • Coolant Manifolds are used to increase the surface area for heat transfer.

Optional

Some components are entirely optional and are not required to build a functioning reactor. These may, however, allow for automation and remote control of reactors.

  • Redstone Ports allow for control of various reactor functions via Redstone circuits.
  • Computer Ports allow for control of various reactor functions via Lua scripting. This requires a computers mod such as CC: Tweaked to be installed.
  • Reactor Glass functions identically to casings, but may only be used on walls. It allows you to see inside of the reactor.

Moderators

Reactor Moderators (commonly incorrectly referred to as Reactor Coolants) are materials placed inside of a Reactor during construction. When a reactor is in operation, a moderator may change the way the reactor performs depending its properties.

Moderators have four main properties that affect the reactor simulation:

  • Absorption: The speed at which radiation is absorbed and converted to case heat.
  • Efficiency: How efficiently absorbed radiation is converted into heat.
  • Moderation: The effectiveness at which radiation is moderated (“softened”).
  • Conductivity: How well heat is transferred from the fuel rods to the reactor casing.

In general, higher values are always better (except for absorption, which may be better or worse depending on your reactor design). For a more in-depth explanation on how to use the information here, see the simulation page.

Something to note is that Modpack authors have the ability to add or modify moderators. For an accurate list of supported blocks/fluids, use Just Enough Items (JEI) by checking the uses for the Reactor Terminal (currently broken on multiplayer).

Moderator Properties

The values listed below are accurate for Bigger Reactors 0.5.2, for Minecraft 1.16.5. Also correct for 0.6.x (1.17-1.19)

ID Absorption Efficiency Moderation Conductivity
astralsorcery:liquid_starlight 0.85 0.8 2.0 3.0
biggerreactors:ludicrite_block 0.6 0.87 3 3
bloodmagic:life_essence_block 0.7 0.55 1.75 2.5
mekanism:ethene 0.37 0.65 1.9 1.5
mekanism:hydrofluoric_acid 0.6 0.45 1.4 2.5
mekanism:hydrogen 0.2 0.3 1.2 0.1
mekanism:hydrogen_chloride 0.31 0.65 1.7 1
mekanism:lithium 0.7 0.6 1.04 0.7
mekanism:oxygen 0.01 0.35 1.04 0.1
mekanism:sodium 0.23 0.6 1.7 1
mekanism:steam 0.33 0.5 1.33 0.5
mekanismgenerators:deuterium 0.03 0.3 1.07 0.1
minecraft:air 0.1 0.25 1.1 0.05
minecraft:cave_air 0.1 0.25 1.1 0.05
minecraft:glass 0.2 0.25 1.1 0.3
minecraft:ice 0.33 0.33 1.15 0.1
minecraft:snow_block 0.15 0.33 1.05 0.05
minecraft:void_air 0.1 0.25 1.1 0.05
minecraft:water 0.33 0.5 1.33 0.1
minecraft:lava 0.33 0.33 1.15 0.7
forge:storage_blocks/allthemodium 0.66 0.9 3.5 3.5
forge:storage_blocks/aluminum 0.5 0.78 1.42 0.6
forge:storage_blocks/bronze 0.51 0.77 1.41 1
forge:storage_blocks/copper 0.5 0.75 1.4 1
forge:storage_blocks/diamond 0.55 0.85 1.5 3
forge:storage_blocks/electrum 0.53 0.82 1.47 2.2
forge:storage_blocks/emerald 0.55 0.85 1.5 2.5
forge:storage_blocks/enderium 0.53 0.88 1.6 3
forge:storage_blocks/gold 0.52 0.8 1.45 2
forge:storage_blocks/graphite 0.1 0.5 2 2
forge:storage_blocks/invar 0.5 0.79 1.43 0.6
forge:storage_blocks/iron 0.5 0.75 1.4 0.6
forge:storage_blocks/lead 0.75 0.75 1.75 1.5
forge:storage_blocks/lumium 0.75 0.55 1.5 1.8
forge:storage_blocks/nickel 0.5 0.82 1.46 0.6
forge:storage_blocks/osmium 0.51 0.77 1.41 1
forge:storage_blocks/platinum 0.53 0.86 1.58 2.5
forge:storage_blocks/signalum 0.63 0.66 1.5 1.8
forge:storage_blocks/silver 0.51 0.79 1.43 1.5
forge:storage_blocks/steel 0.5 0.78 1.42 0.6
forge:storage_blocks/tin 0.3 0.7 1.35 0.75
forge:storage_blocks/unobtainium 0.95 0.82 2 5
forge:storage_blocks/vibranium 0.15 0.75 8 4
forge:storage_blocks/zinc 0.51 0.77 1.41 1
biggerreactors:liquid_obsidian 0.3 0.7 1.35 0.75
allthemodium:molten_allthemodium 0.66 0.9 3.5 3.5
allthemodium:molten_vibranium 0.15 0.75 8 4
allthemodium:molten_unobtainium 0.95 0.82 2 5
allthemodium:vapor_allthemodium 0.66 0.9 3.5 3.5
allthemodium:vapor_vibranium 0.15 0.75 8 4
allthemodium:vapor_unobtainium 0.95 0.82 2 5
forge:superheated_sodium 0.23 0.6 1.7 1
forge:redstone 0.75 0.55 1.6 2.5
forge:ender 0.9 0.75 2.0 2

Bigger Reactors | CurseForge

\ No newline at end of file diff --git a/docs/guides/contributing/assets/clonedev.png b/guides/contributing/assets/clonedev.png similarity index 100% rename from docs/guides/contributing/assets/clonedev.png rename to guides/contributing/assets/clonedev.png diff --git a/docs/guides/contributing/assets/workflow.png b/guides/contributing/assets/workflow.png similarity index 100% rename from docs/guides/contributing/assets/workflow.png rename to guides/contributing/assets/workflow.png diff --git a/guides/contributing/examples/admonition/index.html b/guides/contributing/examples/admonition/index.html new file mode 100644 index 0000000..c460ff2 --- /dev/null +++ b/guides/contributing/examples/admonition/index.html @@ -0,0 +1,64 @@ + Admonition - All The Guides

Admonition

Admonitions, also known as call-outs, are an excellent choice for including side content without significantly interrupting the document flow. Material for MkDocs provides several different types of admonitions and allows for the inclusion and nesting of arbitrary content.


Admonitions follow a simple syntax: a block starts with !!!, followed by a single keyword used as a type qualifier. The content of the block follows on the next line, indented by four spaces (2 Tabs):

Type Qualifiers

  • Note
  • Abstract
  • Info
  • Top
  • Success
  • Question
  • Warning
  • Failure
  • Danger
  • Bug
  • Example
  • Quote
!!! note 
+
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
+    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
+    massa, nec semper lorem quam in massa.
+

Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Changing the title¶

By default, the title will equal the type qualifier in titlecase. However, it can be changed by adding a quoted string containing valid Markdown (including links, formatting, …) after the type qualifier:

!!! note "Phasellus posuere in sem ut cursus"
+
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
+    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
+    massa, nec semper lorem quam in massa.
+

Phasellus posuere in sem ut cursus

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

!!! note "Single line note"
+

Single line note

Removing the title

Similar to changing the title, the icon and title can be omitted entirely by adding an empty string directly after the type qualifier. Note that this will not work for collapsible blocks:

!!! note ""
+
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
+    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
+    massa, nec semper lorem quam in massa.
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Collapsible blocks

??? note
+
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
+    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
+    massa, nec semper lorem quam in massa.
+
Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Adding a + after the ??? token renders the block expanded:

???+ note
+
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod
+    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor
+    massa, nec semper lorem quam in massa.
+
Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Types

Note

Note
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Abstract

Abstract
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Info

Info
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Tip

Tip
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Success

Success
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Question

Question
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Warning

Warning
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Failure

Failure
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Danger

Danger
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Bug

Bug
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Example

Example
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+

Quote

Quote
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.
+
Stacked Admonitions
Abstract
Info
Tip
Success
Question
Warning
Failure
Danger
Bug
Example

Hey! You found a secret hidden easter egg :P

Inline blocks

Use inline end to align to the right (left for rtl languages).

-> Inline End

!!! info inline end "Lorem ipsum"
+
+    Right Lorem ipsum dolor sit amet, consectetur
+    adipiscing elit. Nulla et euismod nulla.
+    Curabitur feugiat, tortor non consequat
+    finibus, justo purus auctor massa, nec
+    semper lorem quam in massa.
+

Lorem ipsum

Left Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

< Inline

!!! info inline "Lorem ipsum"
+
+    Lorem ipsum dolor sit amet, consectetur
+    adipiscing elit. Nulla et euismod nulla.
+    Curabitur feugiat, tortor non consequat
+    finibus, justo purus auctor massa, nec
+    semper lorem quam in massa.
+

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

\ No newline at end of file diff --git a/guides/contributing/examples/annotations/index.html b/guides/contributing/examples/annotations/index.html new file mode 100644 index 0000000..0f77756 --- /dev/null +++ b/guides/contributing/examples/annotations/index.html @@ -0,0 +1,52 @@ + Annotations - All The Guides

Annotations

One of the flagship features of Material for MkDocs is the ability to inject annotations – little markers that can be added almost anywhere in a document and expand a tooltip containing arbitrary Markdown on click or keyboard focus.

Using Annotations

Annotations consist of two parts: a marker, which can be placed anywhere in a block marked with the annotate class, and content located in a list below the block containing the marker:

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.
+{ .annotate }
+
+1.  :man_raising_hand: I'm an annotation! I can contain `code`, __formatted
+    text__, images, ... basically anything that can be expressed in Markdown.
+

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. 🙋‍♂️ I’m an annotation! I can contain code, formatted text, images, … basically anything that can be expressed in Markdown.

Note that the annotate class must only be added to the outermost block. All nested elements can use the same list to define annotations, except when annotations are nested themselves.

In SuperFetch

Annotations can also be nested inside annotations by adding the annotate class to the list item hosting the annotation content, repeating the process:

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.
+{ .annotate }
+
+1.  :man_raising_hand: I'm an annotation! (1)
+    { .annotate }
+
+    1.  :woman_raising_hand: I'm an annotation as well!
+

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. 🙋‍♂️ I’m an annotation! (1)

    1. 🙋‍♀️ I’m an annotation as well!

In Admonitions

The titles and bodies of admonitions can also host annotations by adding the annotate modifier after the type qualifier, which is similar to how inline blocks work:

!!! note annotate "Phasellus posuere in sem ut cursus (1)"
+
+    Lorem ipsum dolor sit amet, (2) consectetur adipiscing elit. Nulla et
+    euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo
+    purus auctor massa, nec semper lorem quam in massa.
+
+1.  :man_raising_hand: I'm an annotation!
+2.  :woman_raising_hand: I'm an annotation as well!
+

In Content Tabs

Content tabs can host annotations by adding the annotate class to the block of a dedicated content tab (and not to the container, which is not supported):

=== "Tab 1"
+
+    Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.
+    { .annotate }
+
+    1.  :man_raising_hand: I'm an annotation!
+
+=== "Tab 2"
+
+    Phasellus posuere in sem ut cursus (1)
+    { .annotate }
+
+    1.  :woman_raising_hand: I'm an annotation as well!
+

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. 🙋‍♂️ I’m an annotation!

Phasellus posuere in sem ut cursus (1)

  1. 🙋‍♀️ I’m an annotation as well!

In Everything Else

Tt’s always possible to leverage the Markdown in HTML extension to wrap arbitrary elements with a div with the annotate class:

<div class="annotate" markdown>
+
+> Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.
+
+</div>
+
+1.  :man_raising_hand: I'm an annotation!
+

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. 🙋‍♂️ I’m an annotation!

With this trick, annotations can also be added to blockquotes, lists, and many other elements that are not supported by the Attribute Lists extension. Furthermore, note that code blocks follow different semantics.

\ No newline at end of file diff --git a/guides/contributing/examples/buttons/index.html b/guides/contributing/examples/buttons/index.html new file mode 100644 index 0000000..2aa6abf --- /dev/null +++ b/guides/contributing/examples/buttons/index.html @@ -0,0 +1,12 @@ + Buttons - All The Guides

Buttons

Material for MkDocs provides dedicated styles for primary and secondary buttons that can be added to any link, label or button element. This is especially useful for documents or landing pages with dedicated call-to-actions.

Buttons

In order to render a link as a button, suffix it with curly braces and add the .md-button class selector to it.

[Subscribe to our newsletter](#){ .md-button }

Subscribe to our newsletter

Adding primary buttons¶

If you want to display a filled, primary button (like on the landing page of Material for MkDocs), add both, the .md-button and .md-button–primary CSS class selectors.

[Subscribe to our newsletter](#){ .md-button .md-button--primary }

Subscribe to our newsletter

Adding icon buttons¶

Of course, icons can be added to all types of buttons by using the icon syntax together with any valid icon shortcode, which can be easily found with a few keystrokes through icon search.

[Send :fontawesome-solid-paper-plane:](#){ .md-button }

Send

\ No newline at end of file diff --git a/guides/contributing/examples/code/index.html b/guides/contributing/examples/code/index.html new file mode 100644 index 0000000..fcc8f23 --- /dev/null +++ b/guides/contributing/examples/code/index.html @@ -0,0 +1,74 @@ + Code - All The Guides

Code

``` py
+import tensorflow as tf
+```
+
import tensorflow as tf
+

Adding Titles

In order to provide additional context, a custom title can be added to a code block by using the title="<custom title>" option directly after the shortcode, e.g. to display the name of a file:

``` py title="bubble_sort.py"
+def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+```
+
bubble_sort.py
def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+

Adding annotations

Code annotations can be placed anywhere in a code block where a comment for the language of the block can be placed, e.g. for JavaScript in // ... and /* ... */, for YAML in # ..., etc.

``` yaml
+theme:
+  features:
+    - content.code.annotate # (1)
+```
+
+1.  :man_raising_hand: I'm a code annotation! I can contain `code`, __formatted
+    text__, images, ... basically anything that can be written in Markdown.
+
theme:
+  features:
+    - content.code.annotate # (1)
+
  1. 🙋‍♂️ I’m a code annotation! I can contain code, formatted text, images, … basically anything that can be written in Markdown.

Stripping comments

If you wish to strip the comment characters surrounding a code annotation, simply add an ! after the closing parenthesis of the code annotation:

``` yaml
+# (1)!
+```
+
+1.  Look ma, less line noise!
+
# (1)!
+
  1. Look ma, less line noise!

Adding line numbers

Line numbers can be added to a code block by using the linenums="<start>" option directly after the shortcode, whereas <start> represents the starting line number. A code block can start from a line number other than 1, which allows to split large code blocks for readability:

``` py linenums="1"
+def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+```
+
1
+2
+3
+4
+5
def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+

Highlighting specific lines

Specific lines can be highlighted by passing the line numbers to the hl_lines argument placed right after the language shortcode. Note that line counts start at 1, regardless of the starting line number specified as part of linenums:

``` py hl_lines="2 3"
+def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+```
+
def bubble_sort(items):
+    for i in range(len(items)):
+        for j in range(len(items) - 1 - i):
+            if items[j] > items[j + 1]:
+                items[j], items[j + 1] = items[j + 1], items[j]
+

Highlighting inline code blocks

Syntax highlighting can be applied to inline code blocks by prefixing them with a shebang, i.e. #!, directly followed by the corresponding language shortcode.

The `#!python range()` function is used to generate a sequence of numbers.
+

The range() function is used to generate a sequence of numbers.

\ No newline at end of file diff --git a/guides/contributing/examples/contenttabs/index.html b/guides/contributing/examples/contenttabs/index.html new file mode 100644 index 0000000..1e7b7a0 --- /dev/null +++ b/guides/contributing/examples/contenttabs/index.html @@ -0,0 +1,79 @@ + Content Tabs - All The Guides

Content Tabs

Sometimes, it’s desirable to group alternative content under different tabs, e.g. when describing how to access an API from different languages or environments. Material for MkDocs allows for beautiful and functional tabs, grouping code blocks and other content.

Grouping Code Blocks

=== "C"
+
+    ``` c
+    #include <stdio.h>
+
+    int main(void) {
+      printf("Hello world!\n");
+      return 0;
+    }
+    ```
+
+=== "C++"
+
+    ``` c++
+    #include <iostream>
+
+    int main(void) {
+      std::cout << "Hello world!" << std::endl;
+      return 0;
+    }
+    ```
+
#include <stdio.h>
+
+int main(void) {
+  printf("Hello world!\n");
+  return 0;
+}
+
#include <iostream>
+
+int main(void) {
+  std::cout << "Hello world!" << std::endl;
+  return 0;
+}
+

Grouping Other Content

=== "Unordered list"
+
+    * Sed sagittis eleifend rutrum
+    * Donec vitae suscipit est
+    * Nulla tempor lobortis orci
+
+=== "Ordered list"
+
+    1. Sed sagittis eleifend rutrum
+    2. Donec vitae suscipit est
+    3. Nulla tempor lobortis orci
+
  • Sed sagittis eleifend rutrum
  • Donec vitae suscipit est
  • Nulla tempor lobortis orci
  1. Sed sagittis eleifend rutrum
  2. Donec vitae suscipit est
  3. Nulla tempor lobortis orci

Embedded Content

!!! example
+
+    === "Unordered List"
+
+        ``` markdown
+        * Sed sagittis eleifend rutrum
+        * Donec vitae suscipit est
+        * Nulla tempor lobortis orci
+        ```
+
+    === "Ordered List"
+
+        ``` markdown
+        1. Sed sagittis eleifend rutrum
+        2. Donec vitae suscipit est
+        3. Nulla tempor lobortis orci
+        ```
+

Example

* Sed sagittis eleifend rutrum
+* Donec vitae suscipit est
+* Nulla tempor lobortis orci
+
1. Sed sagittis eleifend rutrum
+2. Donec vitae suscipit est
+3. Nulla tempor lobortis orci
+
\ No newline at end of file diff --git a/guides/contributing/examples/datatables/index.html b/guides/contributing/examples/datatables/index.html new file mode 100644 index 0000000..b9f0430 --- /dev/null +++ b/guides/contributing/examples/datatables/index.html @@ -0,0 +1,32 @@ + Data Tables - All The Guides

Data Tables

Data tables can be used at any position in your project documentation and can contain arbitrary Markdown, including inline code blocks, as well as icons and emojis:

| Method      | Description                          |
+| ----------- | ------------------------------------ |
+| `GET`       | :material-check:     Fetch resource  |
+| `PUT`       | :material-check-all: Update resource |
+| `DELETE`    | :material-close:     Delete resource |
+
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource

Content Alignment

If you want to align a specific column to the left, center or right, you can use the regular Markdown syntax placing : characters at the beginning and/or end of the divider.

Left

| Method      | Description                          |
+| :---------- | :----------------------------------- |
+| `GET`       | :material-check:     Fetch resource  |
+| `PUT`       | :material-check-all: Update resource |
+| `DELETE`    | :material-close:     Delete resource |
+
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource

Center

| Method      | Description                          |
+| :---------: | :----------------------------------: |
+| `GET`       | :material-check:     Fetch resource  |
+| `PUT`       | :material-check-all: Update resource |
+| `DELETE`    | :material-close:     Delete resource |
+
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource
| Method      | Description                          |
+| ----------: | -----------------------------------: |
+| `GET`       | :material-check:     Fetch resource  |
+| `PUT`       | :material-check-all: Update resource |
+| `DELETE`    | :material-close:     Delete resource |
+
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource
\ No newline at end of file diff --git a/guides/contributing/examples/diagrams/index.html b/guides/contributing/examples/diagrams/index.html new file mode 100644 index 0000000..274b2cd --- /dev/null +++ b/guides/contributing/examples/diagrams/index.html @@ -0,0 +1,139 @@ + Diagrams - All The Guides

Diagrams

Powered by Mermaid.JS

Flow Chars

Flowcharts are diagrams that represent workflows or processes. The steps are rendered as nodes of various kinds and are connected by edges, describing the necessary order of steps:

``` mermaid
+graph LR
+  A[Start] --> B{Error?};
+  B -->|Yes| C[Hmm...];
+  C --> D[Debug];
+  D --> B;
+  B ---->|No| E[Yay!];
+```
+
graph LR
+  A[Start] --> B{Error?};
+  B -->|Yes| C[Hmm...];
+  C --> D[Debug];
+  D --> B;
+  B ---->|No| E[Yay!];

Sequence Diagrams

Sequence diagrams describe a specific scenario as sequential interactions between multiple objects or actors, including the messages that are exchanged between those actors:

``` mermaid
+sequenceDiagram
+  autonumber
+  Alice->>John: Hello John, how are you?
+  loop Healthcheck
+      John->>John: Fight against hypochondria
+  end
+  Note right of John: Rational thoughts!
+  John-->>Alice: Great!
+  John->>Bob: How about you?
+  Bob-->>John: Jolly good!
+```
+
sequenceDiagram
+  autonumber
+  Alice->>John: Hello John, how are you?
+  loop Healthcheck
+      John->>John: Fight against hypochondria
+  end
+  Note right of John: Rational thoughts!
+  John-->>Alice: Great!
+  John->>Bob: How about you?
+  Bob-->>John: Jolly good!

State Diagrams

State diagrams are a great tool to describe the behavior of a system, decomposing it into a finite number of states, and transitions between those states:

``` mermaid
+stateDiagram-v2
+  state fork_state <<fork>>
+    [*] --> fork_state
+    fork_state --> State2
+    fork_state --> State3
+
+    state join_state <<join>>
+    State2 --> join_state
+    State3 --> join_state
+    join_state --> State4
+    State4 --> [*]
+```
+
stateDiagram-v2
+  state fork_state <<fork>>
+    [*] --> fork_state
+    fork_state --> State2
+    fork_state --> State3
+
+    state join_state <<join>>
+    State2 --> join_state
+    State3 --> join_state
+    join_state --> State4
+    State4 --> [*]

Class Diagrams

``` mermaid
+classDiagram
+  Person <|-- Student
+  Person <|-- Professor
+  Person : +String name
+  Person : +String phoneNumber
+  Person : +String emailAddress
+  Person: +purchaseParkingPass()
+  Address "1" <-- "0..1" Person:lives at
+  class Student{
+    +int studentNumber
+    +int averageMark
+    +isEligibleToEnrol()
+    +getSeminarsTaken()
+  }
+  class Professor{
+    +int salary
+  }
+  class Address{
+    +String street
+    +String city
+    +String state
+    +int postalCode
+    +String country
+    -validate()
+    +outputAsLabel()  
+  }
+```
+
classDiagram
+  Person <|-- Student
+  Person <|-- Professor
+  Person : +String name
+  Person : +String phoneNumber
+  Person : +String emailAddress
+  Person: +purchaseParkingPass()
+  Address "1" <-- "0..1" Person:lives at
+  class Student{
+    +int studentNumber
+    +int averageMark
+    +isEligibleToEnrol()
+    +getSeminarsTaken()
+  }
+  class Professor{
+    +int salary
+  }
+  class Address{
+    +String street
+    +String city
+    +String state
+    +int postalCode
+    +String country
+    -validate()
+    +outputAsLabel()  
+  }

Entity-Relationship Diagrams

An entity-relationship diagram is composed of entity types and specifies relationships that exist between entities. It describes inter-related things in a specific domain of knowledge:

``` mermaid
+erDiagram
+  CUSTOMER ||--o{ ORDER : places
+  ORDER ||--|{ LINE-ITEM : contains
+  LINE-ITEM {
+    string name
+    int pricePerUnit
+  }
+  CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
+```
+
erDiagram
+  CUSTOMER ||--o{ ORDER : places
+  ORDER ||--|{ LINE-ITEM : contains
+  LINE-ITEM {
+    string name
+    int pricePerUnit
+  }
+  CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
\ No newline at end of file diff --git a/guides/contributing/examples/formatting/index.html b/guides/contributing/examples/formatting/index.html new file mode 100644 index 0000000..47b413d --- /dev/null +++ b/guides/contributing/examples/formatting/index.html @@ -0,0 +1,82 @@ + Formatting - All The Guides

Formatting

This page will go over extra typography features. If you’re not familiar with Markdown, it’s best to read Markdown Cheatsheet

Critic Markup can be used, which adds the ability to highlight suggested changes, as well as add inline comments to a document:

Text can be deleted and replacement text added. This can also be combined into onea single operation. Highlighting is also possible and comments can be added inline.

Formatting can also be applied to blocks by putting the opening and closing tags on separate lines and adding new lines between the tags and the content.


Highlighting Text

Text can be highlighted with a simple syntax, which is more convenient that directly using the corresponding mark, ins and del HTML tags:

- ==This was marked==
+- ^^This was inserted^^
+- ~~This was deleted~~
+
  • This was marked
  • This was inserted
  • This was deleted

Sub and Super Scripts

Text can be sub- and superscripted with a simple syntax, which is more convenient than directly using the corresponding sub and sup HTML tags:

- H~2~O
+- A^T^A
+
  • H2O
  • ATA

Adding keyboard keys

Keyboard keys can be rendered with a simple syntax. Consult the Python Markdown Extensions documentation to learn about all available shortcodes:

++ctrl+alt+del++
+
+++up+down+left+right++
+
+++lbutton+mbutton+rbutton++
+

Ctrl+Alt+Del

Up+Down+Left+Right

Left Button+Middle Button+Right Button


Lists

Un-Ordered Lists

- Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur
+  accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh
+  lacinia sed. Aenean in finibus diam.
+
+    * Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.
+    * Nam vulputate tincidunt fringilla.
+    * Nullam dignissim ultrices urna non auctor.
+
  • Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh lacinia sed. Aenean in finibus diam.

    • Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.
    • Nam vulputate tincidunt fringilla.
    • Nullam dignissim ultrices urna non auctor.

Ordered Lists

1.  Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis
+    sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis
+    nulla. Vivamus a pharetra leo.
+
+    1.  Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet
+        quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a
+        ultricies libero efficitur sed.
+
+    2.  Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet
+        rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a.
+
+        1.  Mauris dictum mi lacus
+        2.  Ut sit amet placerat ante
+        3.  Suspendisse ac eros arcu
+
  1. Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis nulla. Vivamus a pharetra leo.

    1. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a ultricies libero efficitur sed.

    2. Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a.

      1. Mauris dictum mi lacus
      2. Ut sit amet placerat ante
      3. Suspendisse ac eros arcu

Definition Lists:

`Lorem ipsum dolor sit amet`
+
+:   Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus
+    tellus non sem sollicitudin, quis rutrum leo facilisis.
+
+`Cras arcu libero`
+
+:   Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin
+    ut eros sed sapien ullamcorper consequat. Nunc ligula ante.
+
+    Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.
+    Nam vulputate tincidunt fringilla.
+    Nullam dignissim ultrices urna non auctor.
+
Lorem ipsum dolor sit amet

Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus tellus non sem sollicitudin, quis rutrum leo facilisis.

Cras arcu libero

Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin ut eros sed sapien ullamcorper consequat. Nunc ligula ante.

Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. Nam vulputate tincidunt fringilla. Nullam dignissim ultrices urna non auctor.


Task Lists

- [x] Lorem ipsum dolor sit amet, consectetur adipiscing elit
+- [ ] Vestibulum convallis sit amet nisi a tincidunt
+    * [x] In hac habitasse platea dictumst
+    * [x] In scelerisque nibh non dolor mollis congue sed et metus
+    * [ ] Praesent sed risus massa
+- [ ] Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque
+
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit
  • Vestibulum convallis sit amet nisi a tincidunt
    • In hac habitasse platea dictumst
    • In scelerisque nibh non dolor mollis congue sed et metus
    • Praesent sed risus massa
  • Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque

Tool Tips

The Markdown syntax allows to specify a title for each link, which will render as a tooltip. Add a tooltip to a link with the following lines:

Link Tooltip Title
[Hover me](https://example.com "I'm a tooltip!")
+

Hover me


Link Reference Tooltip
[Hover me][example]
+
+  [example]: https://example.com "I'm a tooltip!"
+

Tooltips can also be added to link references:

Hover me


For all other elements, a title can be added by using the Attribute Lists extension:

:material-information-outline:{ title="Important information" }
+


Adding abbreviations

Abbreviations can be defined by using a special syntax similar to URLs and footnotes, starting with a * and immediately followed by the term or acronym to be associated in square bracket. Once an abbreviation is defined, it can be used anywhere in the document.

Example Abbreviation Usage
The HTML specification is maintained by the W3C.
+
+*[HTML]: Hyper Text Markup Language
+*[W3C]: World Wide Web Consortium
+

The HTML specification is maintained by the W3C.


Adding a glossary

Example Glossary
Lorem ipsum[^1] dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 
+incididunt ut labore et dolore magna aliqua. Ut enim[^2] ad minim veniam, quis nostrud 
+exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+
+  [^1]:
+    This is a glossary that will be added at the bottom of the page and is clickable.
+  [^2]:
+    This is also a glossary at the end of the page.
+
Lorem ipsum1 dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim2 ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Adding Hidden Comments

You can add comments within an document to communicate with other contributors that may edit the file.

<!--- This comment will not be rendered in the final HTML file. --->

<!--- 
+This comment will also not be rendered in the final HTML file. 
+--->
+

However these will show in “View Source” if a user does so. To prevent that there is another way to add comments.

[//]: # (This type of comment will not show in either the final HTML or in "View Source")


  1. This is a glossary that will be added at the bottom of the page and is clickable. 

  2. This is also a glossary at the end of the page. 

\ No newline at end of file diff --git a/guides/contributing/examples/imagery/index.html b/guides/contributing/examples/imagery/index.html new file mode 100644 index 0000000..d7cd2cf --- /dev/null +++ b/guides/contributing/examples/imagery/index.html @@ -0,0 +1,13 @@ + Imagery - All The Guides

Imagery

Resizing

Images can be done as normal,

![](link_to_image.png)

Images can also be clicked, but if wondering you can put captions inside []

![All The Mods Logo](link_to_image.png)

All The Mods Logo

However you can also define sizes for images, as you would with CSS.

![](link_to_image.png){width='25px'}

Within {} you can define your HTML tag attributes. You could even use style

![](link_to_image.png){style='width: 50px'}

And multiple attributes at that

![](link_to_image.png){width='75px' height='75px'}

Note: A space cannot be between the link and {}.

You can also center images on the page using {.center}, and or {.right}

![](link_to_image.png){.center width='75px' height='75px'}

![](link_to_image.png){.right width='75px' height='75px'}

![](link_to_image.png){.center}



Similar to images, clicking images below would redirect you too google

[![](link_to_image.png)](https:/google.com)

You can also use the same attribute properties for width, height, style, etc

[![](link_to_image.png){width='100px' height='100px'}](https:/google.com)

Gifs

Works the same way as images.

Videos

![type:video](url_to_video.mp4)

YouTube embed links & html iframe can also work. https://youtube.com/embed/<VIDEO_ID>

Styles

As before you can use style (CSS) to add some more customizations

![](link_to_image.png){style='border: 3px solid red; transform: rotate(45deg); width: 125px; height: 125px'}
+

\ No newline at end of file diff --git a/docs/guides/contributing/examples/img/formattingWorkaroundDark.png b/guides/contributing/examples/img/formattingWorkaroundDark.png similarity index 100% rename from docs/guides/contributing/examples/img/formattingWorkaroundDark.png rename to guides/contributing/examples/img/formattingWorkaroundDark.png diff --git a/docs/guides/contributing/examples/img/formattingWorkaroundLight.png b/guides/contributing/examples/img/formattingWorkaroundLight.png similarity index 100% rename from docs/guides/contributing/examples/img/formattingWorkaroundLight.png rename to guides/contributing/examples/img/formattingWorkaroundLight.png diff --git a/guides/contributing/examples/index.html b/guides/contributing/examples/index.html new file mode 100644 index 0000000..2da92b8 --- /dev/null +++ b/guides/contributing/examples/index.html @@ -0,0 +1,12 @@ + Examples - All The Guides

Examples

These are example pages. It’s recommended that you view (click edit top right) to see how certain markdown features work if there’s no raw example.

Most of all references are exclusively from Material Markdown References

\ No newline at end of file diff --git a/guides/contributing/index.html b/guides/contributing/index.html new file mode 100644 index 0000000..73e8317 --- /dev/null +++ b/guides/contributing/index.html @@ -0,0 +1,65 @@ + Contributing to ATG - All The Guides

All The Guides

GitHub Repo stars GitHub forks GitHub watchers GitHub


Contributing Restructuring Coming Soon™

ATG will migrate from pip to pipenv soon™

Guidelines

MUST READ

As this guide is currently work-in-progress, guidelines are expected to change.

  1. You may NOT publicly republish All The Guides live on another website.
  2. You may NOT delete or entirely change another author work (except typos / incorrect information), unless given permission to do so from the original Author.
  3. No warnings or errors that prevents mkdocs serve | build.
    1. If you get any errors or warnings, try/get help resolving them before pushing.
    2. You may NOT disable strict mode(s) for any reason.
  4. Your document(s) MUST contain a title and description variable. If you created a page, you may add authors:, and additional variables if necessary. Read Below
  5. Limit or prevent the use of outside links to content (documents or imagery). If possible in the most minimal and or compressed way, include the content with your document.
    1. This would ensure that content will always remain with the guides, for preservation and offline use.
    2. Assets may be included with document(s) within folders in an organized way.
  6. No profanity, and assets and or links to outside websites that contains adult like content, paid material, and or in-appropriate things.
    1. You’ll be banned from future PR’s.
  7. You shall NOT touch mkdocs.yml, requirements.txt, or workflow files, unless authorized, and you know what you’re doing.
  8. Documentation should ONLY be related to All The Mods, if it needs to be.
  9. Javascript is NOT allowed.
  10. Folders & files must be in lowercase letters, with no spaces. Camelcase for image files is allowed.

All The Guides uses Github Pages, MkDocs & Material.


Local Serve / Build

We use Github for our Packs, Mods, and Guides for Collaboration, and CI/CD purposes.

You will be required to Serve, and Build this guide, which comes with some minimal Requirements.


Requirements

You’re not required to have knowledge of them (specifically Python), but they must be installed..


Setup

Fork All The Guides.

Clone / Checkout mkdocs branch

The mkdocs branch is the live - up to date branch that should be used primarily. This should be selected by default when you clone the repo.

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You’re free to use this, Github Desktop or Git.

GitHub Desktop

Go to File -> Clone repository... OR do Ctrl+Shift+O and select your All the Guides fork.

I recommend putting the repository under C:/Users/yourPCName for easy access

Git CLI

Change `USERNAME` to your GitHub name
git clone https://github.com/USERNAME/alltheguides
+

Enable Workflows

Make sure Workflows are enabled, otherwise PR’s will NOT be accepted.


Python Dependencies

All The Guides requires some Python dependencies that’s used to build, and provide features to the Guide itself.

To Install
pip install -r ./requirements.txt --upgrade
+
To Uninstall
pip uninstall -r ./requirements.txt -y
+

Serve

Serve will launch a server locally to test changes live @ localhost:8000. Importantly, it will provide warnings, errors, and mistakes (spelling errors) disabled for the time being, use Grammarly or another spellchecker . Once changes are satisfied without issues, test Build before you commit / make a Pull Request.

2 methods in serving MkDocs locally

mkdocs serve
+
python -m mkdocs serve
+

mkdocs serve --help


Build

Build will finalize compiling Markdown and output HTML files in the site folder. This folder should be ignored. The build should succeed without any warnings or errors before Committing and submitting a Pull Request.

2 methods in building MkDocs locally

mkdocs build
+
python -m mkdocs build
+

mkdocs build --help


Commit (Updating)

Once you’re committed to your changes, you can then Commit your changes, then make a Pull Request against both mkdocs branches / repositories.

Committing Changes

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You’re free to use this, Github Desktop, or Git.

Making a GitHub commit with GitHub Desktop

All changes made will be selected by default, if you do not want to commit some changes, deselect those.

Fill out the Summary and Description on the bottom left, click Commit to mkdocs when you’re ready to commit.

If you made a mistake, you can undo the commit in the bottom left. Otherwise click Push origin to push the commit to GitHub.

Making a Github commit with Git

Add files to Commit.

git commit .
+

Add a message to your Commit. We recommend being more descriptive about your Commit(s).

git commit -m "update"
+

Push changes

git push
+

Pull Request

When submitting a Pull Request, you’re requesting us to Pull changes from your Repository (Fork) to be approve & merged into the official Guide. This is done in browser by going to our repository and creating a Pull Request from your mkdocs branch to ours.


Making a Document

Before we begin, make sure you’ve read the Guidelines.

Documents must be Markdown (.md) files. They can also contain HTML.

This Guide is a mix of Markdown, Material, and PyMarkdown features. Simply placing a .md file within docs/, that file can then be viewed as a page. Note: .md files MUST contain content.

Markdown files should have headers at the start to identify document (Meta / SEO Purposes), and to credit author(s). Without, it’s subjected to be generated based off page content, or be without at all.


Document Headers

Warning

Do NOT use Tab to indent a list of authors in the authors section of document headers. It WILL cause errors.

Highlighted lines are required!!

example.md
---
+title: Title of Your Document
+description: Description of your doc
+authors: 
+ - John Doe
+ - Second Name
+ - Florida Man
+comments: false
+---
+
+# mainPageHeader
+
+Content.
+
+## someTitle
+
+Content.
+
+> [modName](legacy CurseForge link)
+
Descriptions
  • title:
    • The page title of your document
  • description:
    • The description of your page/what it’s about. Only shows in the embed of links
  • authors:
    • The list of authors that have contributed to this document.
  • comments:
    • Enable/Disable the use of comments on your page. Default: false

Your page should start with a H1 (#) page header!


Configure Pages and Navigation (Optional)

Warning

Do NOT use Tab to indent new lines in .pages files. It WILL cause errors.

Per directory, you can create a .pages file. This can be used to list each and all pages you want to show up on navigation, in your own order.

nav:
+  - page1
+  - page2.md
+
+  - dir/
+  - dir/README.md
+
+  # Can change page titles
+  - "3 Is better" : page3
+
+  # Navigation link to another website
+  - "Google" : https://google.com
+
+  # custom sub navigation
+  - 'MORE PAGES':
+    - page1
+    - page2
+
+  - page1
+    - page2
+    - page3
+
+  # 3 dots will auto generate the rest of the pages you've not defined from current directory
+  - ...
+

Directory / Page Layout

This is the directory layout that MkDocs uses.

  • docs | Main folder MkDocs will build site contents
    • cats | Custom site directory that can be accessed from /cats/
      • .pages | Optionally can be used to organize sidebar pages/hierarchy.
      • README.md | Root directory file that should be in each folder.
      • food.md | A page that can be accessed from /cats/food
    • .pages | Optionally can be used to organize sidebar pages/hierarchy.
    • README.md | Root directory file that should be in each folder.
    • name.md | Your unique page name.
README.md
Is the root directory file, if no page is visited specifically.

More Resources

Most of all necessary plugins are installed and can be used from Material / PyMarkdown, however consult the team for any additions.

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/docs/guides/img/kaiAE2Guide1.png b/guides/img/kaiAE2Guide1.png similarity index 100% rename from docs/guides/img/kaiAE2Guide1.png rename to guides/img/kaiAE2Guide1.png diff --git a/docs/guides/img/kaiAE2Guide2.png b/guides/img/kaiAE2Guide2.png similarity index 100% rename from docs/guides/img/kaiAE2Guide2.png rename to guides/img/kaiAE2Guide2.png diff --git a/docs/guides/img/kaiAE2Guide3.png b/guides/img/kaiAE2Guide3.png similarity index 100% rename from docs/guides/img/kaiAE2Guide3.png rename to guides/img/kaiAE2Guide3.png diff --git a/docs/guides/img/kaiAdvancedBeeGuide.png b/guides/img/kaiAdvancedBeeGuide.png similarity index 100% rename from docs/guides/img/kaiAdvancedBeeGuide.png rename to guides/img/kaiAdvancedBeeGuide.png diff --git a/docs/guides/img/kaiApotheosisGuide.png b/guides/img/kaiApotheosisGuide.png similarity index 100% rename from docs/guides/img/kaiApotheosisGuide.png rename to guides/img/kaiApotheosisGuide.png diff --git a/docs/guides/img/kaiBeeAddendum.png b/guides/img/kaiBeeAddendum.png similarity index 100% rename from docs/guides/img/kaiBeeAddendum.png rename to guides/img/kaiBeeAddendum.png diff --git a/docs/guides/img/kaiPneumaticCraftGuide.png b/guides/img/kaiPneumaticCraftGuide.png similarity index 100% rename from docs/guides/img/kaiPneumaticCraftGuide.png rename to guides/img/kaiPneumaticCraftGuide.png diff --git a/docs/guides/img/kaiTheBeesics.png b/guides/img/kaiTheBeesics.png similarity index 100% rename from docs/guides/img/kaiTheBeesics.png rename to guides/img/kaiTheBeesics.png diff --git a/docs/guides/img/translationQuickEdit1.png b/guides/img/translationQuickEdit1.png similarity index 100% rename from docs/guides/img/translationQuickEdit1.png rename to guides/img/translationQuickEdit1.png diff --git a/docs/guides/img/translationQuickEdit2.png b/guides/img/translationQuickEdit2.png similarity index 100% rename from docs/guides/img/translationQuickEdit2.png rename to guides/img/translationQuickEdit2.png diff --git a/guides/index.html b/guides/index.html new file mode 100644 index 0000000..0bcf7f5 --- /dev/null +++ b/guides/index.html @@ -0,0 +1,12 @@ + All The Guides - All The Guides

All The Guides


Welcome to the Guides!

You’ll find various mods in the sidebar with tips on how they can be utilized, as well as how to contribute your own guides to this website or to help contribute translations!


All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/docs/guides/integrateddynamics/img/JgeZnCD.mp4 b/guides/integrateddynamics/img/JgeZnCD.mp4 similarity index 100% rename from docs/guides/integrateddynamics/img/JgeZnCD.mp4 rename to guides/integrateddynamics/img/JgeZnCD.mp4 diff --git a/guides/integrateddynamics/index.html b/guides/integrateddynamics/index.html new file mode 100644 index 0000000..bd73f8f --- /dev/null +++ b/guides/integrateddynamics/index.html @@ -0,0 +1,12 @@ + Integrated Dynamics - All The Guides

Integrated Dynamics

Integrated Dynamics is a mod which allows you to build networks for complex automation and system integration.

Integrated Dynamics

\ No newline at end of file diff --git a/guides/integrateddynamics/infinitefluidtransfer/index.html b/guides/integrateddynamics/infinitefluidtransfer/index.html new file mode 100644 index 0000000..0be82c1 --- /dev/null +++ b/guides/integrateddynamics/infinitefluidtransfer/index.html @@ -0,0 +1,12 @@ + Infinite Fluid Transfer - All The Guides

Infinite Fluid Transfer

Items Required

  • Sink (or other infinite fluid source)
  • Variable Card
  • Logic Cable
  • Fluid Interface
  • Fluid Exporter

Setting it up

  1. Place a Sink down where you want it
  2. Put the Fluid Interface on the Sink via crouch + right-click
  3. Put a Fluid Exporter on the block you want to export fluid into, also by crouch + right-clicking
  4. Connect the Fluid Interface and Fluid Exporter with Logic Cables
  5. Right-click the Fluid Exporter to open an interface
  6. Insert a Variable Card in the Export All Fluids row
  7. Click the + icon on the Export All Fluids row
  8. Cycle pages with the > icon in the top right of the interface to Fluid Transfer Rate
  9. Set the value to 2000000000
  10. Close the interface
  11. Enjoy infinite fluid!

How it works

The Fluid Interface makes the Sink accessible to the Integrated Dynamics network

The Fluid Exporter exports fluids on the network into the block it is attached to

The Logic Cable connecting the interface and exporter serves as the network

The Variable Card acts as a boolean true value to enable the Export All Fluids mode on the Fluid Exporter

Integrated Dynamics

\ No newline at end of file diff --git a/guides/kaimonickguides/index.html b/guides/kaimonickguides/index.html new file mode 100644 index 0000000..ba543ab --- /dev/null +++ b/guides/kaimonickguides/index.html @@ -0,0 +1,12 @@ + Kaimonick's Guides - All The Guides

Kaimonick’s Guides

Click on the images to view them!

Need to know something that isn’t covered here? DM me on

  • Reddit: u/Fiddlesticc
  • Discord: @kaimonick

Apotheosis


Applied Energistics 2


Pneumatic Craft


Productive Bees


\ No newline at end of file diff --git a/guides/translations/index.html b/guides/translations/index.html new file mode 100644 index 0000000..4c99c8a --- /dev/null +++ b/guides/translations/index.html @@ -0,0 +1,16 @@ + Contributing Translations - All The Guides

All The Translations

Important!

There is no set or forced timeline for translations. Work on them at your own pace! PR them however you want, either as whole chapters, sections of chapters, or even the whole thing if you want. We are incredibly grateful for any contributions you make!

Also, tell a staff member that you’d like to translate so they can give you access to the #translation-department, where you can ask questions and collaborate with other translators!

Important note for packs in development

If you are translating a pack that is under active development, then you need to use the lang file from the dev branch, not main. The dev branch will always contain the most up-to-date quest lang file that you will translate.

Note regarding AI/Machine translations

We are not looking for AI/Machine translations. We are looking for native speakers who are looking to put in the effort to make sure grammar is correct for readers of that language. We would’ve done it ourselves if we wanted a cheap attempt at quest translations.


Getting Started

This guide will take you in chronological order from forking a repo, to committing, and then submitting a pull request.

Requirements

  • Know the language you want to translate (duh)
  • A text editor (Notepad++ is a great one)
  • Have Github Desktop or Git Cli
    • GitHub Desktop is recommended for those not familiar with Git.
    • For quick edits, you can open a codespace on your forked repo using Github Web Editor.
      • OR edit the lang file directly in your browser. Explained below.
      • OR you can simply download the translation key file then upload to your repository. Explained below.

Fork the Repository

Fork the modpack/mod you want to translate.

All The Mods GitHub for any modpack that isn’t listed above.


Clone main branch

This will Clone your fork from GitHub onto your computer.

GitHub Desktop

Go to File -> Clone repository... OR do Ctrl+Shift+o and select your ATM Modpack fork.

I recommend putting the repository under C:/Users/yourPCName for easy access

Git CLI
Change `USERNAME` to your GitHub name and `MODPACK` to the name of your fork
git clone https://github.com/USERNAME/MODPACK
+

After cloning the repository go to where you cloned it on your computer and go to packName/kubejs/assets/kubejs/lang then copy and paste the en_us.json file into the same spot.

Rename the copied en_us.json to the language code of the lanuage you want to translate. All language codes can be found below or here.

Language Codes

Language Codes (Ctrl+F to find language)
Code Language
af_ZA Afrikaans (South Africa)
ar_AE Arabic (U.A.E.)
ar_BH Arabic (Bahrain)
ar_DZ Arabic (Algeria)
ar_EG Arabic (Egypt)
ar_IQ Arabic (Iraq)
ar_JO Arabic (Jordan)
ar_KW Arabic (Kuwait)
ar_LB Arabic (Lebanon)
ar_LY Arabic (Libya)
ar_MA Arabic (Morocco)
ar_OM Arabic (Oman)
ar_QA Arabic (Qatar)
ar_SA Arabic (Saudi Arabia)
ar_SY Arabic (Syria)
ar_TN Arabic (Tunisia)
ar_YE Arabic (Yemen)
az_AZ Azeri (Latin)
az_AZ Azeri (Cyrillic)
be_BY Belarusian (Belarus)
bg_BG Bulgarian (Bulgaria)
bs_BA Bosnian (Bosnia and Herzegovina)
ca_ES Catalan (Spain)
cs_CZ Czech (Czech Republic)
cy_GB Welsh (United Kingdom)
da_DK Danish (Denmark)
de_AT German (Austria)
de_CH German (Switzerland)
de_DE German (Germany)
de_LI German (Liechtenstein)
de_LU German (Luxembourg)
dv_MV Divehi (Maldives)
el_GR Greek (Greece)
en_AU English (Australia)
en_BZ English (Belize)
en_CA English (Canada)
en_CB English (Caribbean)
en_GB English (United Kingdom)
en_IE English (Ireland)
en_JM English (Jamaica)
en_NZ English (New Zealand)
en_PH English (Republic of the Philippines)
en_TT English (Trinidad and Tobago)
en_US English (United States)
en_ZA English (South Africa)
en_ZW English (Zimbabwe)
es_AR Spanish (Argentina)
es_BO Spanish (Bolivia)
es_CL Spanish (Chile)
es_CO Spanish (Colombia)
es_CR Spanish (Costa Rica)
es_DO Spanish (Dominican Republic)
es_EC Spanish (Ecuador)
es_ES Spanish (Castilian)
es_ES Spanish (Spain)
es_GT Spanish (Guatemala)
es_HN Spanish (Honduras)
es_MX Spanish (Mexico)
es_NI Spanish (Nicaragua)
es_PA Spanish (Panama)
es_PE Spanish (Peru)
es_PR Spanish (Puerto Rico)
es_PY Spanish (Paraguay)
es_SV Spanish (El Salvador)
es_UY Spanish (Uruguay)
es_VE Spanish (Venezuela)
et_EE Estonian (Estonia)
eu_ES Basque (Spain)
fa_IR Farsi (Iran)
fi_FI Finnish (Finland)
fo_FO Faroese (Faroe Islands)
fr_BE French (Belgium)
fr_CA French (Canada)
fr_CH French (Switzerland)
fr_FR French (France)
fr_LU French (Luxembourg)
fr_MC French (Principality of Monaco)
gl_ES Galician (Spain)
gu_IN Gujarati (India)
he_IL Hebrew (Israel)
hi_IN Hindi (India)
hr_BA Croatian (Bosnia and Herzegovina)
hr_HR Croatian (Croatia)
hu_HU Hungarian (Hungary)
hy_AM Armenian (Armenia)
id_ID Indonesian (Indonesia)
is_IS Icelandic (Iceland)
it_CH Italian (Switzerland)
it_IT Italian (Italy)
ja_JP Japanese (Japan)
ka_GE Georgian (Georgia)
kk_KZ Kazakh (Kazakhstan)
kn_IN Kannada (India)
ko_KR Korean (Korea)
kok_IN Konkani (India)
ky_KG Kyrgyz (Kyrgyzstan)
lt_LT Lithuanian (Lithuania)
lv_LV Latvian (Latvia)
mi_NZ Maori (New Zealand)
mk_MK FYRO Macedonian (Former Yugoslav Republic of Macedonia)
mn_MN Mongolian (Mongolia)
mr_IN Marathi (India)
ms_BN Malay (Brunei Darussalam)
ms_MY Malay (Malaysia)
mt_MT Maltese (Malta)
nb_NO Norwegian (Bokm?l) (Norway)
nl_BE Dutch (Belgium)
nl_NL Dutch (Netherlands)
nn_NO Norwegian (Nynorsk) (Norway)
ns_ZA Northern Sotho (South Africa)
pa_IN Punjabi (India)
pl_PL Polish (Poland)
ps_AR Pashto (Afghanistan)
pt_BR Portuguese (Brazil)
pt_PT Portuguese (Portugal)
qu_BO Quechua (Bolivia)
qu_EC Quechua (Ecuador)
qu_PE Quechua (Peru)
ro_RO Romanian (Romania)
ru_RU Russian (Russia)
sa_IN Sanskrit (India)
se_FI Sami (Northern) (Finland)
se_FI Sami (Skolt) (Finland)
se_FI Sami (Inari) (Finland)
se_NO Sami (Northern) (Norway)
se_NO Sami (Lule) (Norway)
se_NO Sami (Southern) (Norway)
se_SE Sami (Northern) (Sweden)
se_SE Sami (Lule) (Sweden)
se_SE Sami (Southern) (Sweden)
sk_SK Slovak (Slovakia)
sl_SI Slovenian (Slovenia)
sq_AL Albanian (Albania)
sr_BA Serbian (Latin) (Bosnia and Herzegovina)
sr_BA Serbian (Cyrillic) (Bosnia and Herzegovina)
sr_SP Serbian (Latin) (Serbia and Montenegro)
sr_SP Serbian (Cyrillic) (Serbia and Montenegro)
sv_FI Swedish (Finland)
sv_SE Swedish (Sweden)
sw_KE Swahili (Kenya)
syr_SY Syriac (Syria)
ta_IN Tamil (India)
te_IN Telugu (India)
th_TH Thai (Thailand)
tl_PH Tagalog (Philippines)
tn_ZA Tswana (South Africa)
tr_TR Turkish (Turkey)
tt_RU Tatar (Russia)
uk_UA Ukrainian (Ukraine)
ur_PK Urdu (Islamic Republic of Pakistan)
uz_UZ Uzbek (Latin) (Uzbekistan)
uz_UZ Uzbek (Cyrillic) (Uzbekistan)
vi_VN Vietnamese (Viet Nam)
xh_ZA Xhosa (South Africa)
zh_CN Chinese (S)
zh_HK Chinese (Hong Kong)
zh_MO Chinese (Macau)
zh_SG Chinese (Singapore)
zh_TW Chinese (T)
zu_ZA Zulu (South Africa)

Another Optional Way

Instead of copying the entire repo onto your computer, you can also download only the lang file for the respective pack and translate it.

Download the en_us.json lang file from the respective pack, the links below are the most up-to-date files the translations are to be based off of.

For all other packs, the lang file will be under packName/kubejs/assets/kubejs/lang/en_us.json in their respective repositories.

Important

As state in the beginning, if you are translating a pack that is in active development, then you need to use the same file path as above but for the dev branch.


How ATM Quests Work

Before you get to translating you’ll want to know how ATM quests work. ATM Quests use a key:value system to make quest creation and translation efforts easier. It works by assigning a value (ex: a quest description) to a key (ex: a specific quest).

For example atm9.quest.mekanism.desc.basicAlloy would point to the quest to make Mekanism Alloy.

The format for quests are as follows:

packName.quest/chapterTitle.chapterName.description/title/subtitle.nameOfQuest

ATM quests also use Minecraft Formatting Codes for colored text, so make sure you put those color codes back in after translating!

You will also see //n which puts the text on a new line, so be sure to put those back in their proper places also.

Tip

You can view your translations as you do them by doing /refresh to view changes in-game. Make sure to change Minecraft’s language to view it.


Commit (Updating)

Once you’re committed to your translations, you can then Commit them, then make a Pull Request against both main branches / repositories.

Committing Changes

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You’re free to use this, Github Desktop, or Git.

Making a commit with GitHub Desktop
  1. Fill out the Summary and Description on the bottom left
  2. Click Commit to main when you’re ready to commit.

If you made a mistake, you can undo the commit in the bottom left. Otherwise click Push origin to push the commit to GitHub.

If you downloaded just the lang file
  1. Go to your repository on the website and go to same spot you downloaded the en_us.json lang file from.
  2. Click Add file in the top right and click Upload files
  3. Upload your translated lang file and click Commit changes
Making a commit with Git

Add files to Commit.

git commit .
+

Add a message to your Commit. We recommend being more descriptive about your Commit(s).

git commit -m "update"
+

Push changes

git push
+

Pull Request

When submitting a PR (Pull Request), you’re requesting us to Pull translations from your Repository (Fork) to be approve & merged into the official pack. This is done in browser by going to the modpack’s repository and creating a PR from your main branch to ours.


Making Quick Edits

This requires you to have committed your lang file at least once.

Instead of going through the above process again to do a small correction or addition, you can do an edit directly in your browser!

1. Go to your fork of the pack you are translating and navigate to kubejs/assets/kubejs/lang and click on your lang file.

2. Click the little edit button in the top-right under the History button. Yes I use light mode for GitHub, bite me.

3. After you are done with your edits, click Commit changes... and fill out what changes you made, then click Commit changes

4. Now when you go to the “homepage” of your fork, there should be a yellow banner that has a Compare & pull request button. That will be how you make a PR for your quick edit.


More Resources

Most of everything you need to know is explained in this guide, however if you have questions or concerns feel free to ask in the #translation-department!


All The Mods | GitHub | Discord

\ No newline at end of file diff --git a/help/backups/index.html b/help/backups/index.html new file mode 100644 index 0000000..7e30a0e --- /dev/null +++ b/help/backups/index.html @@ -0,0 +1,12 @@ + Backups - All The Guides

Backups

What should I backup?

  1. options.txt
    • This contains most menu, volume, and video settings.
  2. keys.txt
    • This contains all your keybinds.
  3. Any configs you changed inside packInstall/configs
DON’T copy and paste the entire configs folder

Only backup the config files that you have changed. Copying the entire folder can corrupt your install if the configs are from a different pack version.

  1. A backup of your world(s)
  2. Journeymap Waypoints (optional)
    • These are located in packinstall/journeymap/data/sp. Copy the folder with the world you want to backup.

Restoring a World Backup

SimpleBackups is a mod included in the client version of ATM, but NOT included in the server version of ATM. You must add it yourself or use your server host’s built-in options.

By default, it will save to packInstall/simplebackups with a zip file with your world’s name. You can configure how often it does a backup at /configs/simplebackups-common.toml. Default Interval: Every 2 hours (120 minutes).

ATLauncher

  1. Close out of your modpack.
  2. Click Open Folder and open the simplebackups folder.
  3. Copy the zip file of the backup you want to restore to your saves folder.
  4. Go to your saves folder and delete the world you want to restore
  5. Open the zip file, then drag the folder inside, out to your saves folder. Delete the zip file

If the restore was unsuccessful, you may need to try an older backup before the issue occurred

CurseForge

  1. Close completely out of the modpack.
  2. Right-click on the ATM icon in your CurseForge modpack screen and click Open Folder

  1. Open simplebackups

  1. Open the zip file that you want to restore. (They’re labeled by the date created; the latest one is recommended.)
  2. Copy (Ctrl + C) the folder inside, then return to your saves folder.
  3. Back up your old world and delete it from this folder
  4. Paste (Ctrl + V) the backup into saves

If the restore was unsuccessful, you may need to try an older backup before the issue occurred

Simplebackups | CurseForge

\ No newline at end of file diff --git a/help/commands/index.html b/help/commands/index.html new file mode 100644 index 0000000..d6e5136 --- /dev/null +++ b/help/commands/index.html @@ -0,0 +1,53 @@ + Commands - All The Guides

Commands

Useful Minecraft Commands

Minecraft

Teleport To Spawn
/spawn
+
Forge TPS Count
/forge tps
+

Kill/Remove Item Entities
/kill @e[type=minecraft:item]
+
Kill All Entities, Except Players
/kill @e[type=!minecraft:player]
+
Clear Inventory
/clear
+
Corail Tombstone

Corail Tombstone

Knowledge GUI
/tbgui
+
Request Teleport To Player
/tbrequestteleport <name>
+
Teleport Binding (Like /sethome)
/tbbind set 1-5
+/tbbind teleport 1-5
+
Teleport to death position
/tbteleport death
+

Modify Knowledge Points
/tbknowledge
+
Restore Graves
/tbrestoreinventory
+
Get last graves coordinates
/tbshowlastgraves
+
Restore Graves From Player Backups
/tbrcovery
+
Spark

Spark

Client Profiling
/sparkc profiler --timeout 30
+
Spark TPS Count
/spark tps
+
Server Ping
/spark ping
+

Server Profiling
/spark profiler --timeout 30
+
Server Health
/spark health
+/spark health --memory
+/spark health --network
+
Tick Monitoring
/spark tickmonitor
+/spark tickmonitor --threshold <percent>
+/spark tickmonitor --threshold-tick <milliseconds>
+/spark tickmonitor --without-gc
+
Spark Garbage Collection History
/spark gc
+
Garbage Collection Monitor
/spark gcmonitor
+
Spark Heap Summary
/spark heapsummary
+
Spark Heap Dump
/spark heapdump
+
Past Spark Activity/History
/spark activity
+

--only-ticks-over 20 argument for profiling will record only ticks that’s over 20 ticks that’s considered problematic

--thread * for profiling can help record all threads that Spark may not pick up

FTBChunks

FTBChunks

Modifiy Claim Chunks Count
/ftbchunks admin extra_claim_chunks <player> <set/add> <amount>
+
Modify Force Loaded Chunks Count
/ftbchunks admin extra_force_load_chunks <player> <set/add> <amount>
+
Bypass Chunk Claims
/ftbchunks admin bypass_claims
+
Unload All Forced Loaded Chunks
/ftbchunks admin unload_everything
+
Unclaim All Chunks (All Team/Player Chunks)
/ftbchunks admin unclaim_everything
+
FTBTeams/Party

FTBTeams/Party

FTBQuests
FTBQuests Edit Mode
/ftbquests editing_mode true
+
Crash Utilities

Crash Utilities

Clear Entities (Must be enabled)
/cu callItemClear
+
Get world entities list
/cu entities list
+
Teleport Player (Even Offline) to spawn
/cu unstuck <name>
+
Mahou Tsuaki

Mahou Tsuaki

Show/Hide Mahou Count
/showmahou
+
MahouSet Morgan Damage
/mahouset morgan @p 5000000
+
\ No newline at end of file diff --git a/help/configs/index.html b/help/configs/index.html new file mode 100644 index 0000000..3c9efe6 --- /dev/null +++ b/help/configs/index.html @@ -0,0 +1,12 @@ + Configs - All The Guides

Configs

Pack configs are usually located in the config/ folder, though others may be in your world/serverconfigs/ folder.

When editing configs, please make sure server / client is not running

For clients, it’s safe to edit world/serverconfigs/ while not in the world and or restarting entire client.


FTB

FTB Essentials

Provide a couple of Bukkit / Spigot Essentials like commands. /home, /back, /tpa, /warp, etc. Commands can be enabled / disabled and configured, such as cool-downs and limits, even with FTBRanks.

Config: world/serverconfig/ftbessentials.snbt

FTBRanks

Includes ranks (hence name), is alike Group Manager, EssentialsEX, PermX, LuckyPerms, allowing you to setup custom / styled ranks for players that give additional command usages.

More information can be found on FTB Wiki: FTBRanks, FTB Essentials

Config: world/serverconfig/ftbranks/ranks.snbt

No Fly Zone

In ATM9, a new mod was introduced to prohibit flight in certain dimensions. This can be disabled.

Config: world/serverconfig/noflyzone.snbt

F.A.Q

Can you make ATM ores minable by quarry?

By design, fake players are not allowed to mine ATM ores. This ruins the purpose of the ore being obtained naturally, thus did not come with a config to change.

\ No newline at end of file diff --git a/help/faq/index.html b/help/faq/index.html new file mode 100644 index 0000000..b912504 --- /dev/null +++ b/help/faq/index.html @@ -0,0 +1,12 @@ + FAQ - All The Guides

FAQ

This FAQ is put into 3 sections.


Context Keywords

  • Instance: The specific modpack or profile folder in question.
  • Arguments: Commands/Flags used with Java to help with performance (Most Garbage Collection).
  • Allocate: The amount of ram assigned to minecraft. By default it’s always set to 4Gb or lower, and some modpack requires more.

Technical


Failed To Authenticate

Info

Authentication errors can be caused by numerous reasons. TL;TD here’s some things you can try/check.

  • Re-authenticate your account by logging out and back within your launcher.
  • Restart launcher.
  • Restart Network (Unplugging router/modem (“Internet Box(es)”)).
  • Are you using or have Hamachi installed? If installed but not using, this could be a culprit.
  • IPv6 issues.
    • Setting this Java argument to force IPv4 -Djava.net.preferIPv4Stack=true
    • Disabling “Internet Protocol Version 6 (TCP/IPv6)” in/on Adapter Settings in Network and Sharing Center.
  • Flushing DNS > Command Prompt > ipconfig /flushdns
  • Firewall / DDoS protection (Modded MC can potentially flood network with packets considering to be an attack and blocking a specific server ip/inbound connections).

Modpack Crashes (At Beginning)

Info

Crashes can be caused by numerous of reasons, which can be frustrating to figure out exactly why you’re crashing.

  • Check within launcher/instance settings there’s enough ram allocated. (8GB / 8,192MB). No more than (12GB / 12,288MB).
  • Check you’re using the correct (not latest) version of Forge required for the pack, additionally Java
  • Update GPU drivers, and ensure you’re using your Dedicated GPU.
    • If AMD,
    • If NVidia,
      • Go to NVidia Control Panel, Update Driver and go to 3D Settings.
      • Select Program Settings tab, and click Add
      • Sort By by Recently Used, and select Java.
  • Repair Installation, and or delete Minecraft / Forge libraries folder.
    • CurseForge: %USERPROFILE%\curseforge\minecraft\Install
  • Repair Configs
    • Delete instance/config & instance/kubejsfolders.
    • Download the pack files (not server) from CurseForge
    • Inside the archived zip, copy the overrides/config and overrides/kubejs folder to your instance folder.
  • Repair / Re-Install Profile (Pack).
    • Not all launchers have this, therefor you may need to create another instance of the pack. Caution: If you delete current instance, you may delete your single player worlds! Make sure you back them up.

World Crashing (Before / After)

Info

Crashing worlds can suck. Some of the most common, if non of the above fixed the issue.

  • Corrupted Configs
  • Corrupted Player Data
  • Corrupted Chunks
  • Ticking Entity Or Block
  • Mods that’s being problematic (Bugs, or Additional mods you’ve installed).

Some things you can try if,

  • Delete saves?/world/serverconfigs/ folder.
    • Note: If a world crash / fail to properly save, serverconfigs can potentially get corrupted.
  • Repair Configs
    • Delete instance/config & instance/kubejsfolders.
    • Download the pack files (not server) from CurseForge
    • Inside the archived zip, copy the overrides/config and overrides/kubejs folder to your instance folder.
  • Upload the most recent crash report prior to crashing within instance/crash-reports/ folder to MC Logs
    • MCLogs can sometimes point of the issue within the crash report.

Ticking Entity Or Block

Info

Ticking entities or blocks occurs by what they might’ve interacted with, loaded / done incorrectly, or perhaps even an un/known discovered bug.

Lucky there’s a trick you could do to possible fix this, if not manually.

  • Locate & Open saves?/world/serverconfig/forge-server.toml with any text editor.

    • For Block Entities: Set removeErroringBlockEntities to true.
    • For Ticking Entities: Set removeErroringEntities to true.
    • Load world, save /save-all & /stop, and set back false
      • Caution: This should NOT be left on for long as it can cause issues removing things if lag is created.
  • Upload the most recent crash report prior to crashing within instance/crash-reports/ folder to MC Logs.

    • It can help identify the source of the ticking entity, or at-least what’s ticking and from what mod and the position.
    • If you don’t have the location of this entity in crash report, or not sure of the exact player position that’s near it,
      • Worst cast scenario, removing one of the mods involved in the crash, loading the world once and adding the mod back sometimes fixes the issue. Make sure you backup your world prior.
      • Submit crash report (MC Logs) link to the us via GitHub or Discord.
    • If have the location of this ticking entity, download an NBT editor: NBT Explorer or NBT Studio, as it will be handy.
      • Player
        • With NBT editor of choice, open your world/playerdata/<player-uuid>.dat file. You can use Minecraft UUID to figure out player UUID. Open up the player tree and then locate player X, Y, Z coordinates.
      • Coordinates
        • Use this Minecraft Coordinate Calculator and input the Block Position. You’re then given your X, and Z Chunk Section, along with your Region information / file .mca.
        • With NBT editor, Open your the Region .mca file in world/regions, or world/entities if it’s mod entity. Look for Chunk [-,-] @ World (X,Z) where World (X, Z) is the Chunk Section.
          • Note: Nether is in DIM-1 and End is in DIM1 folder. Other dimensions would be in the dimensions folder respectively.
        • After chunk is found, open the tree and look for / through entities for the crashing entity.
          • Note: You can also use the Search function above and search for the Value of the entity name.
          • Note #2: Searching will search within the last location / tree index your mouse clicked.
    • If all still fails, feel free to send us your log or crash report from MC Logs to our Github or Discord

Servers


Gameplay

Visit the FAQ of your specific pack to view it’s FAQ!


\ No newline at end of file diff --git a/docs/help/img/backupsAT1.png b/help/img/backupsAT1.png similarity index 100% rename from docs/help/img/backupsAT1.png rename to help/img/backupsAT1.png diff --git a/docs/help/img/backupsCF1.png b/help/img/backupsCF1.png similarity index 100% rename from docs/help/img/backupsCF1.png rename to help/img/backupsCF1.png diff --git a/docs/help/img/backupsCF2.png b/help/img/backupsCF2.png similarity index 100% rename from docs/help/img/backupsCF2.png rename to help/img/backupsCF2.png diff --git a/help/index.html b/help/index.html new file mode 100644 index 0000000..e9ecdb4 --- /dev/null +++ b/help/index.html @@ -0,0 +1,12 @@ + Help - All The Guides

All The Mods - Help

Documentation is currently work in progress, however check out F.A.Q in the mean time.

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/help/java/index.html b/help/java/index.html new file mode 100644 index 0000000..aff06da --- /dev/null +++ b/help/java/index.html @@ -0,0 +1,13 @@ + Java - All The Guides

Java

Java Versions

  • Minecraft <= 1.15 | Java 8 | sudo apt install openjdk-8-jdk
  • Minecraft 1.16 | Java 8 OR Java 11 | sudo apt install openjdk-11-jdk
  • Minecraft 1.17 | Java 16 | sudo apt install openjdk-16-jdk
  • Minecraft 1.18+ | Java 17 | sudo apt install openjdk-17-jdk
Other Java Download Links

Amazon Corretto, Azul Zulu, or Oracle JDK


Java Arguments

These can help both server and client with performance in,

  • Reducing Ram Usage. (GC will clean up more efficiently)
  • Reduced Lag Spikes. (GC will clean more frequently, reducing large lag spikes)
Java 8+ Arguments
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=32M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
+

Java Arguments Explanation
  • -Xms, -Xmx
Places boundaries on the heap size to increase the predictability of garbage collection. The heap size is limited in replica servers so that even Full GCs do not trigger SIP retransmissions. -Xms sets the starting size to prevent pauses caused by heap expansion.
  • UseG1GC
Use the Garbage First (G1) Collector.
  • +ParallelRefProcEnabled
Optimizes the GC process to use multiple threads for weak reference checking. Not sure why this isn’t default…
  • MaxGCPauseMillis=200
This setting controls how much memory is used in between the Minimum and Maximum ranges specified for your New Generation. This is a “goal” for how long you want your server to pause for collections. 200 is aiming for at most loss of 4 ticks. This will result in a short TPS drop, however the server can make up for this drop instantly, meaning it will have no meaningful impact to your TPS. 200ms is lower than players can recognize. In testing, having this value constrained to an even lower number results in G1 not recollecting memory fast enough and potentially running out of old gen triggering a Full collection. Just because this number is 200 does not mean every collection will be 200. It means it can use up to 200 if it really needs it, and we need to let it do its job when there is memory to collect.
  • +UnlockExperimentalVMOptions
Needed for some the below options
  • +DisableExplicitGC
Many plugins think they know how to control memory, and try to invoke garbage collection. Plugins that do this trigger a full garbage collection, triggering a massive lag spike. This flag disables plugins from trying to do this, protecting you from their bad code.
  • +AlwaysPreTouch
AlwaysPreTouch gets the memory setup and reserved at process start ensuring it is contiguous, improving the efficiency of it more. This improves the operating systems memory access speed. Mandatory to use Transparent Huge Pages.
  • G1NewSizePercent
These are the important ones. You now can specify percentages of an overall desired range for the new generation. With these settings, we tell G1 to not use its default 5% for new gen, and instead give it 40%! Minecraft has an extremely high a memory allocation rate, ranging to at least 800 Megabytes a second on a 30 player server! And this is mostly short-lived objects (Block Position).
  • G1MaxNewSizePercent
Percentage (0-100) of the heap size to use as default maximum young gen size.
  • G1HeapRegionSize
Default is auto calculated. SUPER important for Minecraft, especially 1.15, as with low memory situations, the default calculation will in most times be too low. Any memory allocation half of this size (4MB) will be treated as “Humongous” and promote straight to old generation and is harder to free. If you allow java to use the default, you will be destroyed with a significant chunk of your memory getting treated as Humongous.
  • G1ReservePercent
MC Memory allocation rate in up-to-date versions is really insane. We run the risk of a dreaded “to-space exhaustion” not having enough memory free to move data around. This ensures more memory is waiting to be used for this operation. Default is 10, so we are giving another 10 to it.
  • G1HeapWastePercent
Amount of space, expressed as a percentage of the heap size, that G1 is willing not to collect to avoid expensive GCs.
  • G1MixedGCCountTarget
Default is 8. Because we are aiming to collect slower, with less old gen usage, try to reclaim old gen memory faster to avoid running out of old.
  • InitiatingHeapOccupancyPercent
Percentage of the (entire) heap occupancy to start a concurrent GC cycle. GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap and not just one of the generations, including G1, use this option. A value of 0 denotes ‘do constant GC cycles’. The default value is 45.
  • G1MixedGCLiveThresholdPercent
Controls when to include regions in Mixed GC’s in the Young GC collection, keeping Old Gen tidy without doing a normal Old Gen GC collection. When your memory is less than this percent, old gen won’t even be included in ‘mixed’ collections. Mixed are not as heavy as a full old collection, so having small incremental cleanups of old keeps memory usage light.
Default is 65 to 85 depending on Java Version, we are setting to 90 to ensure we reclaim garbage in old gen as fast as possible to retain as much free regions as we can.
  • G1RSetUpdatingPauseTimePercent
Default is 10% of time spent during pause updating RSets, reduce this to 5% to make more of it concurrent to reduce pause durations.
  • SurvivorRatio
Because we drastically reduced MaxTenuringThreshold, we will be reducing use of survivor space drastically. This frees up more regions to be used by Eden instead.
  • +PerfDisableSharedMem
Causes GC to write to file system which can cause major latency if disk IO is high – See JVM MMAP Pause
Note: This argument can prevent VisualVM from detecting the Java process.
  • MaxTenuringThreshold
Minecraft has a really high allocation rate of memory. Of that memory, most is reclaimed in the eden generation. However, transient data will overflow into survivor. Initially played with completely removing Survivor and had decent results, but does result in transient data making its way to Old which is not good.Max Tenuring 1 ensures that we do not promote transient data to old generation, but anything that survives 2 passes of Garbage Collection is just going to be assumed as longer-lived.
Doing this greatly reduces pause times in Young Collections as copying data up to 15 times in Survivor space for a tenured object really takes a lot of time for actually old memory. Ideally the GC engine would track average age for objects instead and tenure out data faster, but that is not how it works.
Considering average GC rate is 10s to the upwards of minutes per young collection, this does not result in any ‘garbage’ being promoted, and just delays longer lived memory to be collected in Mixed GC’s.
  • +UseLargePagesInMetaspace
For Large Pages – It’s even more important to use -Xms = -Xmx! Large Pages needs to have all the memory specified for it, or you could end up without the gains. This memory will not be used by the OS anyway, so use it. Additionally, use these flags (Metaspace is Java 8 Only, don’t use it for Java7):
  • +UseTransparentHugePages
Controversial feature but may be usable if you can not configure your host for real HugeTLBFS. Try adding, but it’s extremely important you also have AlwaysPreTouch set. Otherwise, THP will likely hurt you. We have not measured how THP works for MC or its impact with AlwaysPreTouch, so this section is for the advanced users who want to experiment.
\ No newline at end of file diff --git a/help/lag/index.html b/help/lag/index.html new file mode 100644 index 0000000..cb3fef7 --- /dev/null +++ b/help/lag/index.html @@ -0,0 +1,20 @@ + Lag / Profiling - All The Guides

Lag

For identifying Lag sources/causes most of our packs have Spark and Observable in them by Default.

Spark Profiler

Normal players also have access to the command /spark tps & /forge tps and that gives a general indication of any potential lag issues that might need investigating.

For Spark, players in SP worlds with cheats enabled, or Server OPs can use the command /spark profiler --timeout 180 to get a 3 minute snapshot of the server and anything that could be causing TPS issues. You can look at the URL returned by the mod to see an interactive online view of all server threads. Users can also use the command /spark profiler --only-ticks-over 100 --timeout 60, to identify intermittent lag spikes.

Note

For profiling client side FPS issues, use the sparkc command instead using same arguments above.


Observable

Observable has the same permission requirements, but users need to set a keybind in their Keybinds settings to open the UI, from there click the profile TPS button and wait for it to complete, then depending on the mc version, you will either get a url, or an in-game table listing what blocks/entities are costing the most TPS, it will also visually highlight blocks with a spectrum color coding from Green to Red, with things colored in red generally being the worst for performance.

Observable is an in-game profiler that can be used by anyone (1.20+, enabled by default in ATM9 and must create a keybind). In order to use the “Visit” button on the web page, you must be op.

Crash Utilities (Item Clear)

By default, Crash Utilities comes with most of our packs, though one feature Item Clear is disabled. It’s a very handy feature to have enabled with packs containing farms and automation to prevent massive entity leaks, which causes lag & crashes. This can keep your server entity count low for better performance.

To enable, locate and open world/serverconfigs/crashutilities-server.toml. Very top section, set enabled to true. The timer is the amount of time in minutes entities will be checked, followed by an Item Clear chat announcement when the entities goes over the maximum threshold.

When editing configs, please make sure server / client is not running

For clients, it’s safe to edit world/serverconfigs/ while not in the world and or restarting entire client.

Useful Commands

General Commands

Kill Item Entities (Or Specific Entity)
/kill @e[type=minecraft:item]
+
Command may need to be executed more than once to clear all entities. Additionally, the Crash Utilities entities list command can be used to locate entities before they’re cleared.
Kill Everything, Except Players
/kill @e[type=!minecraft:player]
+
Spark

Run Server Side Profiler (TPS Issues)
/spark profiler --timeout 30
+
Run Client Side Profiler (FPS/TPS Issues)
/sparkc profiler --timeout 30 
+

--only-ticks-over 20 argument will record only ticks that’s over 20 that’s considered problematic.

--thread * can help record all threads Spark may not pick up.

Crash Utilities Commands

Entities List
/cu entities list
+
Item Clear (Must Be Enabled)
/cu callItemClear
+
Teleport Player To Spawn (Even Offline Player(s))
/cu unstuck <name>
+
Open Player Inventory (Even Offline Player(s))
/cu inventory <name>
+
\ No newline at end of file diff --git a/help/server/amp/index.html b/help/server/amp/index.html new file mode 100644 index 0000000..58640ae --- /dev/null +++ b/help/server/amp/index.html @@ -0,0 +1,12 @@ + AMP Server Setup - All The Guides

AMP Server Setup

Warning

This guide is outdated as of 6/1/24. Guide will be updated to AMP’s new UI.

AMP Install Guide

This is a guide for installing ATM9 (and possibly other packs) on CubeCoderz’s AMP gameserver hosting software!

Info

The current version of AMP as of the creation of this guide is 2.5.0.4. As the software is updated, the exact location of settings may change.

Warning

This guide is currently hosted by the official ATM website/Discord. If found anywhere else please advise them to delete it and instead link to this official version.

This guide assumes:
  • You have fully installed the AMP software and have successfully gained access to the web based GUI. If you need help installing the base software please refer to the CubeCoderz Documentation.
  • You have already downloaded the latest version of the ATM Pack ServerFiles and have unzipped them into a folder.

Creating a New Instance.

  • Under Select Application, choose Minecraft Java Edition.
  • Under Friendly Name, pick a name to reference the server such as ATM9.
  • Under After Creation, pick Do Nothing.
Note

If you do not want the instance to start every time AMP is started, uncheck the Start Instance on Boot option. This is on by default.

  • Select Create Instance


Configuring Server Settings

  • Choose Manage from the newly created instance

  • On the left menu, select Configuration and then Server Settings

Change the following:

  • Server type: Forge
  • Forge Version: Change to current Forge version.
    • For this example the current version is 47.2.20.
  • View Distance: 8
  • Simulation Distance: 6
  • Use Synchronous IO: off


  • On the left menu, select Security and Privacy

Change the following:

  • Require Session IP Stickiness: off


  • On the left menu, select Performance and Limits

Change the following:

  • Max View Distance: 8
  • Enable Sleep Mode: off
  • Stop Timeout: 60000
  • Backup Count Limit: 3


On the left menu, select Monitoring and Metrics

Change the following:

  • Console Scrollback Period: 120


On the left menu, select Java and Memory

Change the following:

  • Memory Limit (MB): Min: 6144. Max: 16384

Anything over 16384 requires changing the GC settings and is beyond the scope of this guide.

  • Additional java options: Paste in the server java arguments from the user_jvm.txt without the first two lines xmx or xms

-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1

  • Java Version: Java 17
Note

If Java 17 is not in the dropdown list, you need to close AMP completely, install Java 17 to the server, then restart AMP.


On the left menu, select Gameplay and Difficulty

Change the following:

  • Op permission level: 3:Kick/ban/op players
    • This is changed to keep OP users from running spark report from in-game. Spark reports should only be done from the server console directly.
  • Spawn Protection Radius: 1
  • Allow PvP: on
  • Allow Flight: on
  • Allow Command Blocks: on
  • Player idle timeout: 0
    • Can be done via mods instead or you can change this setting to your preference, but can lead to ‘ghost players’ on occasion stuck in the AMP menus as showing online after they have been kicked.
  • Use Whitelist: Don’t change from default off
    • Highly recommended to use this feature, but only after the server is successfully running
  • Max tick Time: -1


Installing Server Forge

Click the Back arrow at the top of the left menu

Select Console from the left menu and then click Update from the middle screen.

Wait while the server downloads and installs the selected forge version.

This can take several minutes depending on your server specs and internet connection

When it finishes it should say The server installed successfully; if it does not please doublecheck the above settings and verify you have selected the appropriate Forge Version.


Importing the Server Files

On the left menu, select File Manager

The easiest way to import the server files is to unzip the files and create a new zip

  • To remove the double-wrapping (zipping a folder instead of a group of files) of the files:
    • Extract the serverfiles you downloaded from CurseForge into a folder.
    • Go into the folder inside that folder and then select all the files and re-zip.

I recommend using 7zip as this is what I have used for testing

Make sure you save as .zip and not .7z


Drag the newly created zip file into the File Manager window. Once it finishes you may need to refresh the page to see the file in the file list.


Right click the .zip file in the list and chose Extract Here.

This may take several minutes depending on your server specs and storage speed.

Once it finishes you may need to refresh the page to see the newly extracted files populated in the list.


Starting the Server

Select Console from the left menu and click Start.

  • Accept the EULA that pops up


The server will now start. This can take several minutes depending on your server specs and storage speed.

Note

Errors are normal and to be expected as long as it continues loading. Be patient as the first startup usually takes time while it creates all the needed files, configs, folders, etc.

You will know it is finished when the notification window in the bottom right disappears and the server says Dedicated server took XXX.XX seconds to load.


It is recommended after the first startup to stop the server, using the red Stop button at the top, and then start it again.

  • Try to connect to the server and verify operation
  • If you need to add server admin mods you would place them into the mods folder under File Manager while the server is stopped; you can edit files directly from within the file manager in AMP for making changes to the txt config files.

Only edit, add, or remove files WHILE THE SERVER IS STOPPED!

Changing Server Properties

All settings within server.properties are in independent tabs in the various settings in AMP and it is recreated every server startup.

CHANGES TO server.properties FILE WILL NEVER SAVE!

Changing Server Type

If you need to edit the world type for example, to run a Skyblock server, you would change it under Configuration > Server Settings > World Type.

All The Mods | GitHub | Discord | CubeCoders: AMP

\ No newline at end of file diff --git a/docs/help/server/img/ss1.png b/help/server/img/ss1.png similarity index 100% rename from docs/help/server/img/ss1.png rename to help/server/img/ss1.png diff --git a/docs/help/server/img/ss10.png b/help/server/img/ss10.png similarity index 100% rename from docs/help/server/img/ss10.png rename to help/server/img/ss10.png diff --git a/docs/help/server/img/ss11.png b/help/server/img/ss11.png similarity index 100% rename from docs/help/server/img/ss11.png rename to help/server/img/ss11.png diff --git a/docs/help/server/img/ss12.png b/help/server/img/ss12.png similarity index 100% rename from docs/help/server/img/ss12.png rename to help/server/img/ss12.png diff --git a/docs/help/server/img/ss13.png b/help/server/img/ss13.png similarity index 100% rename from docs/help/server/img/ss13.png rename to help/server/img/ss13.png diff --git a/docs/help/server/img/ss14.png b/help/server/img/ss14.png similarity index 100% rename from docs/help/server/img/ss14.png rename to help/server/img/ss14.png diff --git a/docs/help/server/img/ss15.png b/help/server/img/ss15.png similarity index 100% rename from docs/help/server/img/ss15.png rename to help/server/img/ss15.png diff --git a/docs/help/server/img/ss16.png b/help/server/img/ss16.png similarity index 100% rename from docs/help/server/img/ss16.png rename to help/server/img/ss16.png diff --git a/docs/help/server/img/ss17.png b/help/server/img/ss17.png similarity index 100% rename from docs/help/server/img/ss17.png rename to help/server/img/ss17.png diff --git a/docs/help/server/img/ss18.png b/help/server/img/ss18.png similarity index 100% rename from docs/help/server/img/ss18.png rename to help/server/img/ss18.png diff --git a/docs/help/server/img/ss19.png b/help/server/img/ss19.png similarity index 100% rename from docs/help/server/img/ss19.png rename to help/server/img/ss19.png diff --git a/docs/help/server/img/ss2.png b/help/server/img/ss2.png similarity index 100% rename from docs/help/server/img/ss2.png rename to help/server/img/ss2.png diff --git a/docs/help/server/img/ss20.png b/help/server/img/ss20.png similarity index 100% rename from docs/help/server/img/ss20.png rename to help/server/img/ss20.png diff --git a/docs/help/server/img/ss3.png b/help/server/img/ss3.png similarity index 100% rename from docs/help/server/img/ss3.png rename to help/server/img/ss3.png diff --git a/docs/help/server/img/ss4.png b/help/server/img/ss4.png similarity index 100% rename from docs/help/server/img/ss4.png rename to help/server/img/ss4.png diff --git a/docs/help/server/img/ss5.png b/help/server/img/ss5.png similarity index 100% rename from docs/help/server/img/ss5.png rename to help/server/img/ss5.png diff --git a/docs/help/server/img/ss6.png b/help/server/img/ss6.png similarity index 100% rename from docs/help/server/img/ss6.png rename to help/server/img/ss6.png diff --git a/docs/help/server/img/ss7.png b/help/server/img/ss7.png similarity index 100% rename from docs/help/server/img/ss7.png rename to help/server/img/ss7.png diff --git a/docs/help/server/img/ss8.png b/help/server/img/ss8.png similarity index 100% rename from docs/help/server/img/ss8.png rename to help/server/img/ss8.png diff --git a/docs/help/server/img/ss9.png b/help/server/img/ss9.png similarity index 100% rename from docs/help/server/img/ss9.png rename to help/server/img/ss9.png diff --git a/help/server/index.html b/help/server/index.html new file mode 100644 index 0000000..2c828ec --- /dev/null +++ b/help/server/index.html @@ -0,0 +1,43 @@ + Server - All The Guides

Server

This guide will explain how to setup an AllTheMods server locally, or with a server host.


Prerequisites

  • Server with at-least 8GB+ RAM (As required for most ATM packs).
  • CPU that’s atleast 3.5Ghz of speed.
  • Specific Java version based on the pack Minecraft version.

Installation

  • Download modpack Server-Files from CurseForge.
  • Extract Server-Files to a folder.

If you’ve a 3rd party Anti-Virus installed, exclude the folder the files will be extracted too, as files may get remove or corrupted after extracting.


Java

If you have multiple Java versions installed, the default java -version will be used, which may not be the correct version based on the Minecraft version. There’s 3 solutions,

  • Edit the server script, changing java to correct java binary path.
    • Ex: "C:\Program Files\Java\jre-17\bin\java.exe" @user_jvm_args.txt ...
  • Remove old / add the correct java/bin path to System Environment Variables > Path
  • Linux, you can re-configure Java using sudo update-alternatives --config java
  • Uninstall all Java versions except the one being used.

If you’ve installed Java, you may need to restart OS.


Local Installation

  • Extract Server-Files to a folder.
  • Window: Do not unzip files under OneDrive or any other cloud folder, as this can potentially remove / corrupt files.
  • Linux: Ensure server folder has read/write permission, and script has execute permission,
    • To avoid any read/write permission errors, install server under /home/<user>/ folder.
    • Run once: sudo chmod +x startserver.sh.
  • Starting Server:
    • Windows: Execute startserver.bat
    • Linux: Execute ./startserver.sh

After running, you’re required to accept Minecraft Eula in the eula.txt file.

Make any changes necessary to server.properties, configs, and or world/serverconfigs, and run startserver.bat/sh again to start the server.

Warning

Many guides tell you to edit server-ip or server-port. In most cases you DO NOT need to edit these, especially server-ip. This can prevent your server from starting.

There’s no startserver.bat/sh script?

Install Forge first,

  • java -jar forge-installer*.jar --installServer
  • You will then instead run.bat/sh to start server.
There’s no run.bat/sh?

Expecting this is an older Forge version, you’ll need to create a script that launches Forge.

run.bat/sh
java -Xms4G -Xmx8G -jar forge-*universal.jar
+
How to allocate RAM or add Arguments?

Allocating RAM and or adding Arguments are applied within usr_jvm_args.txt. Older versions of Forge will require adding arguments in the script file, if that file doesn’t exist.

How To Import A World?

Upload world folder to server folder. Make sure the world folder is named world.

Performance Tips: Check out Lag / Profiling


Server Host Installation

Most server host has a one-click server installer you can use, otherwise

  • If possible, setup a fresh Forge server based on the current Forge version of the pack.
  • Upload extracted Server-Files to host, via FTP or STFP.
    • To connect to FTP/SFTP, you could use a client like FileZilla.
    • If there’s no FTP/SFTP, you may be able to upload the Server-Files zip, and extract on server host via their online File Manager.

Server Host Custom Jar

If server host requires a .jar file, later Forge versions cannot be ran directly. If older, you can upload and use the forge-*universal.jar as custom jar. Extract & Upload Server-Files to main server folder. Otherwise,

  • Download ServerStarter jar, then upload to main server folder. Use this as the custom jar.
  • Download pack Server-Files from CurseForge, extract, and upload ALL to main server folder.
  • Create a file named server-setup-config.yaml, and copy / paste the config example below.

Modifiy config for pack if necessary, specifically the mcVersion and loaderVersion, and place config in server root then start server as normal.

Config Example | ATM9

Highlighted lines are important to be configured

server-setup-config.yaml
# Version of the specs, only for internal usage if this format should ever change drastically
+_specver: 2
+modpack:
+    name: ATM9
+    description: All The Mods 9
+install:
+    mcVersion: 1.20.1
+    loaderVersion: 47.2.19
+    installerUrl: "https://files.minecraftforge.net/maven/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/forge-{{@mcversion@}}-{{@loaderversion@}}-installer.jar"
+    installerArguments:
+        - "--installServer"
+    modpackFormat: zip
+    baseInstallPath: ~
+    checkFolder: true
+    installLoader: true
+    connectTimeout: 30
+    readTimeout: 30
+launch:
+    crashLimit: 10
+    maxRam: 8
+    minRam: 4
+    crashTimer: 60min
+    preJavaArgs: ~
+    startFile: "forge-{{@mcversion@}}-{{@loaderversion@}}.jar"
+    startCommand:
+        - "@user_jvm_args.txt"
+        - "@libraries/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/{{@os@}}_args.txt"
+        - "nogui"
+    forcedJavaPath: ~
+    supportedJavaVersions: [17]
+
  • mcVersion: Minecraft Version
  • loaderVersion: Forge Version
  • supportedJavaVersions: Supported Java Version(s)

Updating

Updating ATM servers is pretty simple. There’s 3 ways you can accomplish this.

BACKUP world before proceeding.

Automatic

  1. If you have a server host with a modpack installer, usually you can do a one-click update within your control panel.

Manually (2 methods)

  1. Backup any modified configs or kubejs scripts, if any, to be replaced later.

    • Download Server Files from CurseForge
    • Delete kubejs, defaultconfigs, mods, and config folder.
    • If server forge version is different, delete libraries folder, and copy over new startserver.bat/sh, & forge-installer.jar if exists.
    • Extract the deleted folders from Server Files into your server folder.
  2. Download Server Files from CurseForge.

    • Extract Server Files to a new folder.
    • Copy world, local folder, server.properties, & eula.txt to new server folder.
    • If journeymap folder exist, copy over aswell.
    • Copy over any modified server configs/kubejs scripts

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..2a07841 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + Welcome - All The Guides

Welcome!

To the new All The Guides, by All The Mods (ATM).

This guide is currently a work in progress, so there will be missing/placeholder information. Want to contribute? Check About All The Guides Contributing

All The Guides is only for our packs

ATM has custom changes and additions, mostly recipes. This means it’s only for ATM packs, and may not be the same for other packs. However, guides in the Additional Guides should work for any pack with said mod.

Intro

Are you new to Minecraft, All The Mods, or just need help getting started? Here you’ll find some Tips and Guides on getting started with All The Mods!

Getting Started

All The Mods packs require a PC that has at least 16GB or more system RAM for the best playable experience.

Allocating between 8-12GB RAM is required for most of our packs. Smaller (Lite) designed packs can run with at least 4GB allocated. This must be changed within Launcher settings. 8GB minimum is recommended.

Requirements

  • An official Mojang / Microsoft account for Java Edition.
  • A third-party launcher that can download, install, and run our packs.
  • A PC with at least 16GB or more RAM.

Launchers

The most common launchers are CurseForge, FTB App, PolyMC, Prism, ATLauncher and GDLauncher. You will need one of these launchers to install packs. Sign into your Microsoft account and search for the modpack of your choice to install.

Allocation

By default, in the launcher or instance (modpack) settings, 4GB is allocated. Recommended MAX allocation is 8-12GB | 8192-12288Mb. You should never allocate all of or more RAM than necessary.

Additionally, some launchers may install and use the appropriate version of Java, though make sure you’re using the correct version of Java for the Minecraft version of the pack installed.

Need Help? Check out the dedicated Help section, especially F.A.Q


All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/js/timeago.min.js b/js/timeago.min.js new file mode 100644 index 0000000..a8530a5 --- /dev/null +++ b/js/timeago.min.js @@ -0,0 +1,2 @@ +/* Taken from https://cdnjs.cloudflare.com/ajax/libs/timeago.js/4.0.2/timeago.min.js */ +!function(s,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((s=s||self).timeago={})}(this,function(s){"use strict";var a=["second","minute","hour","day","week","month","year"];function n(s,n){if(0===n)return["just now","right now"];var e=a[Math.floor(n/2)];return 1=m[t]&&t=m[e]&&e 0) { + var locale = nodes[0].getAttribute('locale'); + timeago.render(nodes, locale); + } + }) +} else { + var nodes = document.querySelectorAll('.timeago'); + if (nodes.length > 0) { + var locale = nodes[0].getAttribute('locale'); + timeago.render(nodes, locale); + } +} diff --git a/legacy/atm0/index.html b/legacy/atm0/index.html new file mode 100644 index 0000000..ce0385f --- /dev/null +++ b/legacy/atm0/index.html @@ -0,0 +1,12 @@ + ATM0 - All The Guides
\ No newline at end of file diff --git a/legacy/atm1/index.html b/legacy/atm1/index.html new file mode 100644 index 0000000..5287beb --- /dev/null +++ b/legacy/atm1/index.html @@ -0,0 +1,12 @@ + ATM1 - All The Guides
\ No newline at end of file diff --git a/legacy/atm2/index.html b/legacy/atm2/index.html new file mode 100644 index 0000000..66b71e9 --- /dev/null +++ b/legacy/atm2/index.html @@ -0,0 +1,12 @@ + ATM2 - All The Guides
\ No newline at end of file diff --git a/legacy/atm3/expert/index.html b/legacy/atm3/expert/index.html new file mode 100644 index 0000000..13f2bc6 --- /dev/null +++ b/legacy/atm3/expert/index.html @@ -0,0 +1,12 @@ + All The Mods 3 - Expert - All The Guides

All The Mods 3 - Expert

All The Mods 3 - Expert | CurseForge | GitHub

\ No newline at end of file diff --git a/legacy/atm3/index.html b/legacy/atm3/index.html new file mode 100644 index 0000000..d81647b --- /dev/null +++ b/legacy/atm3/index.html @@ -0,0 +1,12 @@ + All The Mods 3 - All The Guides
\ No newline at end of file diff --git a/legacy/atm3/remix/index.html b/legacy/atm3/remix/index.html new file mode 100644 index 0000000..0e272f4 --- /dev/null +++ b/legacy/atm3/remix/index.html @@ -0,0 +1,12 @@ + All The Mods 3 - Remix - All The Guides

All The Mods 3 - Remix

All The Mods 3 - Remix | CurseForge | GitHub

\ No newline at end of file diff --git a/legacy/atm4/index.html b/legacy/atm4/index.html new file mode 100644 index 0000000..384033b --- /dev/null +++ b/legacy/atm4/index.html @@ -0,0 +1,12 @@ + All The Mods 4 - All The Guides
\ No newline at end of file diff --git a/legacy/atm5/index.html b/legacy/atm5/index.html new file mode 100644 index 0000000..2580469 --- /dev/null +++ b/legacy/atm5/index.html @@ -0,0 +1,12 @@ + All The Mods 5 - All The Guides
\ No newline at end of file diff --git a/legacy/atmslop/index.html b/legacy/atmslop/index.html new file mode 100644 index 0000000..de04658 --- /dev/null +++ b/legacy/atmslop/index.html @@ -0,0 +1,12 @@ + All The Mods - Slice Of Pie - All The Guides

All The Mods - Slice Of Pie

All The Mods - Slice Of Pie | CurseForge | GitHub

\ No newline at end of file diff --git a/legacy/atmslop2/index.html b/legacy/atmslop2/index.html new file mode 100644 index 0000000..ee03afa --- /dev/null +++ b/legacy/atmslop2/index.html @@ -0,0 +1,12 @@ + All The Mods - Slice Of Pice 2 - All The Guides

All The Mods - Slice Of Pice 2

All The Mods - Slice Of Pie 2 | CurseForge | GitHub

\ No newline at end of file diff --git a/legacy/index.html b/legacy/index.html new file mode 100644 index 0000000..37d5e8d --- /dev/null +++ b/legacy/index.html @@ -0,0 +1,12 @@ + All The Mods - Legacy - All The Guides

All The Mods - Legacy

Legacy (Old) ATM packs that’s no longer being maintained.

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/misc/index.html b/misc/index.html new file mode 100644 index 0000000..ce72cb4 --- /dev/null +++ b/misc/index.html @@ -0,0 +1,12 @@ + Miscellaneous - All The Guides

Miscellaneous

Content that doesn’t fit in other places, or have similarities with all packs.

All The Mods | GitHub | Discord | Akliz Server Hosting

\ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 5eb3635..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,183 +0,0 @@ -site_name: All The Guides -site_url: https://allthemods.github.io/alltheguides/ -repo_name: alltheguides -repo_url: https://github.com/AllTheMods/alltheguides/ -edit_uri: edit/dev/docs/ -use_directory_urls: true -copyright: All The Mods ™ | Made By Seg -strict: !ENV [ENABLE_STRICT, true] -extra: - generator: true - homepage: / - version: - default: stable - social: - - icon: fontawesome/brands/discord - link: https://discord.gg/allthemods - name: Discord - - icon: fontawesome/brands/reddit - link: https://www.reddit.com/r/allthemods/ - - icon: fontawesome/brands/twitter - link: https://twitter.com/allthemods?lang=en - - icon: fontawesome/brands/github - link: https://github.com/AllTheMods -theme: - custom_dir: overrides - name: material - highlightjs: true - language: en - prev_next_buttons_location: none - features: - - navigation.instant - - navigation.tracking - - navigation.tabs - - navigation.tabs.sticky - - navigation.indexes - - navigation.top - - navigation.footer - - announce.dismiss - - content.action.edit - - content.tooltips - - content.code.copy - - content.code.annotate - - toc.follow - icon: - repo: fontawesome/brands/github - edit: material/pencil - view: material/eye - favicon: assets/images/atms.ico - logo: assets/images/atms.png - font: - text: "Nunito" - palette: - - media: "(prefers-color-scheme: dark)" - scheme: slate - primary: black - accent: orange - toggle: - icon: material/brightness-7 - name: Dark Mode - - media: "(prefers-color-scheme: light)" - scheme: default - primary: black - accent: orange - toggle: - icon: material/brightness-4 - name: Light Mode - -extra_css: - - assets/stylesheets/style.css - -extra_javascript: - - assets/javascripts/script.js - - assets/javascripts/tablesort.min.js - -plugins: - - search - - awesome-pages: { - collapse_single_pages: true, - strict: true, - } - - meta-descriptions - - tags - - mkdocs-video - - markmap -# - blog -# - autoref - - git-revision-date-localized: { - type: timeago, - enable_creation_date: true, - fallback_to_build_date: false, - strict: !ENV [ENABLE_STRICT_GIT_REVISION_DATE, false], - enabled: !ENV [ENABLE_GIT_REVISION_DATE, false] - } - - minify: { - minify_html: !ENV [ENABLE_MINIFY, false], - minify_js: !ENV [ENABLE_MINIFY, false], - minify_css: !ENV [ENABLE_MINIFY, false], - htmlmin_opts: { - remove_comments: !ENV [ENABLE_REMOVE_COMMENTS, false] - }, - cache_safe: true - } -# - offline: { -# enabled: !ENV [ENABLE_OFFLINE, false] -# } - - glightbox: { - touchNavigation: true, - loop: true, - effect: fade, - slide_effect: fade, - width: auto, - height: auto, - draggable: false, - auto_caption: true, - caption_position: bottom - } - - git-authors: { - show_email_address: false, - sort_authors_by: contribution, - fallback_to_empty: true, - show_contribution: true, - strict: !ENV [ENABLE_STRICT_GIT_AUTHORS, false], - enabled: !ENV [ENABLE_GIT_AUTHORS, false] - } - -hooks: - - extensions/external_links_md_extension.py - -markdown_extensions: - extra: {} - smarty: {} - toc: { - permalink: true, - title: Table Of Contents - } - admonition: {} - attr_list: {} - abbr: {} - sane_lists: {} - pymdownx.snippets: {} - pymdownx.emoji: { - emoji_index: !!python/name:material.extensions.emoji.twemoji , - emoji_generator: !!python/name:material.extensions.emoji.to_svg - } - pymdownx.highlight: { - anchor_linenums: true, - line_spans: __span, - pygments_lang_class: true - } - pymdownx.critic: {} - pymdownx.caret: {} - pymdownx.keys: {} - pymdownx.mark: {} - pymdownx.tilde: {} - pymdownx.betterem: {} - pymdownx.details: {} - pymdownx.inlinehilite: {} - pymdownx.tasklist: { - custom_checkbox: true, - clickable_checkbox: true - } - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: { - alternate_style: true - } - def_list: {} - md_in_html: {} - footnotes: {} - tables: {} - -validation: - nav: - omitted_files: info - not_found: warn - absolute_links: info - links: - not_found: warn - absolute_links: info - unrecognized_links: info \ No newline at end of file diff --git a/overrides/main.html b/overrides/main.html deleted file mode 100644 index 3b87426..0000000 --- a/overrides/main.html +++ /dev/null @@ -1,4 +0,0 @@ -{% extends "base.html" %} - -{% block extrahead %} -{% endblock %} \ No newline at end of file diff --git a/overrides/partials/comments.html b/overrides/partials/comments.html deleted file mode 100644 index 602bb22..0000000 --- a/overrides/partials/comments.html +++ /dev/null @@ -1,55 +0,0 @@ -{% if page.meta.comments %} -

{{ lang.t("meta.comments") }}

- - - - -{% endif %} \ No newline at end of file diff --git a/overrides/partials/toc.html b/overrides/partials/toc.html deleted file mode 100644 index 378b059..0000000 --- a/overrides/partials/toc.html +++ /dev/null @@ -1,70 +0,0 @@ - - - -{% set title = lang.t("toc") %} -{% if config.mdx_configs.toc and config.mdx_configs.toc.title %} - {% set title = config.mdx_configs.toc.title %} -{% endif %} - - - - - - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 7a1ce65..0000000 --- a/requirements.txt +++ /dev/null @@ -1,17 +0,0 @@ -mkdocs -mkdocstrings -mkdocs-autorefs -mkdocs-awesome-pages-plugin -mkdocs-git-authors-plugin -mkdocs-git-committers-plugin -mkdocs-git-revision-date-localized-plugin -mkdocs-material -mkdocs-meta-descriptions-plugin -mkdocs-minify-plugin -mkdocs-glightbox -mkdocs-open-in-new-tab -mkdocs-video -mkdocs-markmap -# mkdocs-badges -# mkdocs-spellcheck[all] -# mkdocs-section-index \ No newline at end of file diff --git a/docs/robots.txt b/robots.txt similarity index 100% rename from docs/robots.txt rename to robots.txt diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..584d309 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome","text":""},{"location":"#welcome","title":"Welcome!","text":"

To the new All The Guides, by All The Mods (ATM).

This guide is currently a work in progress, so there will be missing/placeholder information. Want to contribute? Check About All The Guides Contributing

All The Guides is only for our packs

ATM has custom changes and additions, mostly recipes. This means it\u2019s only for ATM packs, and may not be the same for other packs. However, guides in the Additional Guides should work for any pack with said mod.

"},{"location":"#intro","title":"Intro","text":"

Are you new to Minecraft, All The Mods, or just need help getting started? Here you\u2019ll find some Tips and Guides on getting started with All The Mods!

"},{"location":"#getting-started","title":"Getting Started","text":"

All The Mods packs require a PC that has at least 16GB or more system RAM for the best playable experience.

Allocating between 8-12GB RAM is required for most of our packs. Smaller (Lite) designed packs can run with at least 4GB allocated. This must be changed within Launcher settings. 8GB minimum is recommended.

"},{"location":"#requirements","title":"Requirements","text":"
  • An official Mojang / Microsoft account for Java Edition.
  • A third-party launcher that can download, install, and run our packs.
  • A PC with at least 16GB or more RAM.
"},{"location":"#launchers","title":"Launchers","text":"

The most common launchers are CurseForge, FTB App, PolyMC, Prism, ATLauncher and GDLauncher. You will need one of these launchers to install packs. Sign into your Microsoft account and search for the modpack of your choice to install.

Allocation

By default, in the launcher or instance (modpack) settings, 4GB is allocated. Recommended MAX allocation is 8-12GB | 8192-12288Mb. You should never allocate all of or more RAM than necessary.

Additionally, some launchers may install and use the appropriate version of Java, though make sure you\u2019re using the correct version of Java for the Minecraft version of the pack installed.

Need Help? Check out the dedicated Help section, especially F.A.Q

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"404/","title":"404","text":""},{"location":"404/#404","title":"404","text":"

Page Not Found

The resource you\u2019re visiting may or may not have ever existed.

"},{"location":"about/","title":"About","text":""},{"location":"about/#about","title":"About","text":"

All the Mods started out as a private pack amongst a few friends that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

Can you get to the Creative items by making the \u201cATM Star\u201d?

In All the Mods we will continue the tradition adding many new mods while going for more stability.

Does \u201cAll The Mods\u201d really contain ALL THE MODS? No, of course not.

"},{"location":"about/#hosting","title":"Hosting","text":"

Need hosting? Check out Akliz (With a discount) on us!

Start playing for only $20/m

Save 20% off of the first month using coupon code allthemods

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"about/alltheteam/","title":"All The Team","text":""},{"location":"about/alltheteam/#all-the-team","title":"All The Team","text":""},{"location":"about/alltheteam/#owner","title":"Owner","text":"
  • WhatTheDrunk
"},{"location":"about/alltheteam/#admins","title":"Admins","text":"
  • oly2o6 (Second In Command)
  • Mitchell52
  • MutantGumdrop
  • Maddy
  • thevortex
  • Ki-Tan
"},{"location":"about/alltheteam/#modpack-development-team","title":"Modpack Development Team","text":"
  • Arochio
  • Billy
  • DJNifos
  • Drack.ion
  • Draxial
  • Jebraltar
  • KJM
  • LobsterJonn
  • radiomike12
  • ToshibaMicrowave
  • ZephyrWindSpirit \ud83d\udc09
"},{"location":"about/alltheteam/#all-the-team_1","title":"All The Team","text":"
  • 1Yumi
  • Bored
  • Klonoa
  • SlackerNet>XI<
  • Timeconsumer
  • Ultramega
"},{"location":"about/alltheteam/#former-retired","title":"Former - Retired","text":"
  • AlfredGG | (Former QuestDev)
  • EnigmaQuip
  • Phantom
  • Dijkstra
  • Seg
  • screret
  • u\u028dop\u01ddp\u1d09sdn
  • BeeJnugggets
  • 0mega420
  • Thunder_Nova the Pun_isher

Current as of (04/26/2024)

"},{"location":"about/allthetimeline/","title":"All The Timeline","text":""},{"location":"about/allthetimeline/#all-the-mods-timeline","title":"All The Mods: Timeline","text":""},{"location":"about/allthetimeline/#2024","title":"2024","text":"
  • Jan 6: All The Mods 9: No Frills (ATM9NF)
  • Apr 1: Maul The Odds (MTO)
  • May 30: All The Mods 9: To The Sky (ATM9TTS)
"},{"location":"about/allthetimeline/#2023","title":"2023","text":"
  • Jan 11: All The Mods: Gravitas - (ATMG)
  • Jul 25: All The Mods: Volcano Block - (ATMVB)
  • Dec 17: All The Mods: Gravitas\u00b2
"},{"location":"about/allthetimeline/#2022","title":"2022","text":"
  • Aug 03: All The Mods 7: To The Sky - (ATM7TTS)
  • Oct 18: All The Mods 7: Lite - (ATM7L)
  • Nov 30: All The Mods 9 - (ATM9)
"},{"location":"about/allthetimeline/#2021","title":"2021","text":"
  • Feb 01: All The Mods 6 Sky - (ATM6TTS)
  • Jul 02: All The Magic Spellbound - (ATMS)
  • Aug 26: All The Mods 8 - (ATM8)
"},{"location":"about/allthetimeline/#2020","title":"2020","text":"
  • Jan 05: All The Mods 5 - (ATM5)
  • Feb 06: All The Mods Fabric - (ATMF)
  • Feb 11: All The Mods Slice Of Pi - (ATMSLOP)
  • Mar 31: All The Mods 0 - (ATM0)
  • May 07: All The Mods 6 - (ATM6)
  • Dec 08: All The Mods 7 - (ATM7)
  • Dec 30: All The Mods Slice Of Pi 2 - (ATMSLOP2)
"},{"location":"about/allthetimeline/#2019","title":"2019","text":"
  • Jan 02: All The Mods Magic
  • Feb 27: All The Mods 4 - (ATM4)
  • Jun 26: All The Mods 3 Expert - (ATM3E)
"},{"location":"about/allthetimeline/#2018","title":"2018","text":"
  • Aug 28: All The Mods 3 Remix - (ATM3R)
"},{"location":"about/allthetimeline/#2017","title":"2017","text":"
  • Jun 17: All The Mods 3 - (ATM3)
  • Aug 9: All The Mods 3 Lite - (ATM3L)
  • Aug 17: All The Mods Expert - (Remastered)
"},{"location":"about/allthetimeline/#2016","title":"2016","text":"
  • Mar 03: All The Mods - (ATM1)
  • Sep 03: All The Mods Lite - (ATM1L)
  • Oct 09: All The Mods Expert - (ATM1E)
  • Oct 19: All The Sky
  • Nov 16: All The Mods 2 - (ATM2)
"},{"location":"about/contributors/","title":"Contributors","text":""},{"location":"about/contributors/#contributors","title":"Contributors","text":"

List of all Contributors who\u2019ve helped with Guide, Pack(s), etc..

  • segfault (64.8%)
  • ArcTrooper (34.27%)
  • dKatsuro (0.41%)
  • Jeremiah Winsley (0.38%)
  • billbertking1 (0.11%)
  • C_ffeeStain (0.03%)
  • kinglugus90 (0.02%)

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"about/feedback/","title":"Feedback","text":""},{"location":"about/feedback/#feedback","title":"Feedback","text":"

Please keep comments PG13 - clear of profanity.

We appreciate all of your feedback in regards to Packs, and Guides!

"},{"location":"about/license/","title":"License","text":""},{"location":"about/license/#license","title":"License","text":"

All The Mods (Packs/Mods) are released on curseforge only, as All Rights Reserved.

This covers the following files/folders,

  • All Quests and rewards in \\instance\\config\\ftbquests\\quests\\
  • All custom KubeJS scripts in \\instance\\kubejs\\
  • All custom AllTheMods PackMenu assets in \\instance\\packmenu\\resources\\

What does All Rights Reserved Mean?

  • For players, it means nothing, you are still permitted to play, film, and or stream the pack.
  • For anyone else, it means you CANNOT redistribute any of the above folders or files in any publicly released packs without permission from ATM
All Rights Reserved\n\nCopyright (c) 2023-2024 All The Mods (AllTheMods / ATM)\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"atm6/","title":"All The Mods 6","text":""},{"location":"atm6/#all-the-mods-6","title":"All The Mods 6","text":"

Welcome to ATM6 Guides!

Minimum required ram 10GB.

ATM6 | CurseForge | GitHub

"},{"location":"atm6/apotheosis/","title":"Apotheosis","text":""},{"location":"atm6/apotheosis/#apotheosis","title":"Apotheosis","text":"

Overpowered enchanting, charms and bosses, apotheosis offers a variety of things to keep you busy. Don\u2019t forget to check out the Enchanment Library!

"},{"location":"atm6/apotheosis/#perfect-enchanting-table-setup","title":"Perfect Enchanting Table Setup","text":"

Max Eterna and Arcana, 0% Quanta

  • 11 Draconic Endshelves
  • 10 Heart-Forged Seashelves
  • 1 Melonshelf

Max Eterna, Arcana, & Quanta / Rectification - 100%

  • 3 - Endshelf
  • 3 - Draconic Endshelf
  • 12 - Pearlescent Endshelf
  • 2 - Wither Skulls
  • 2x - Shelf of Masterful Sight
  • 5x - Shelf of End Fused Rectification (20%)

Apotheosis | CurseForge

"},{"location":"atm6/astralsorcery/","title":"Astral Sorcery","text":""},{"location":"atm6/astralsorcery/#astral-sorcery","title":"Astral Sorcery","text":"Rock Crystal Stats Properties Max Tier Starlight Collection Ritual Effect Ritual Range Tool Durability Tool Effectiveness Lens Transfer Lens Amount Lens Effect Size 3 20% 20% 15% 2 Purity 2 40% 40% 40% 15% 16.67% Shape 3 25% 25% 25% 10% (Up to 60%) 20% Tool Durability 3 25% Tool Efficiency 3 15% (Up to 60%) Ritual Effect 3 30% Ritual Range 3 Collection Rate 3 20% 20% Focus: Constellation 2 30% 30% 35% The property 'Focus: Constellation' is only active if the Focus matches the attunement of the crystal. Starlight Collection is used by (celestial) collector crystals, and by the crystal on top of a ritual pedestal. Ritual Effect is used by the crystal on top of a ritual pedestal. Ritual Range is used by the crystal on top of a ritual pedestal. Tool Durability is used by (infused) crystal tools. Tool Durability is used by (infused) crystal tools. Shape caps at tier 6 while Tool Efficiency caps out at tier 4 per tool. Lens Transfer is used for the starlight transfer through a crystal lens or a crystal prism. Lens Amount is used for obtaining more crystal lenses per craft. Lens Effect is used by crystal lenses or crystal prisms with coloured lenses in them. Rock Crystals can hold a total of up to 7 tiers (attributes). Celestial crystals can hold 10. For example, a rock crystal can hold no more than Size 3, Purity 2, and Ritual Range 2 (3+2+2=7). Crystal tools combine the properties of the crystals used to make them."},{"location":"atm6/astralsorcery/#discovery","title":"Discovery","text":"

Get the Astral Tome + Resonating Wand. Find the first 5 constellation papers and put a crafting table near a Collector Crystal. Make sure the Crystal has a clear view to the sky. While holding the Resonating Wand in your off-hand, run/fly around the night and look for shiny spots on the ground, dig down and look for Rock Crystals.

"},{"location":"atm6/astralsorcery/#exploration","title":"Exploration","text":"

Craft the Lightwell, throw some Aquamarines in it, and craft the Starlight Crafting Altar. Get the Looking Glass, 8x Astral Relays and optionally a Cave Illuminator.

"},{"location":"atm6/astralsorcery/#attunement","title":"Attunement","text":"

Get the Linking Tool, put Iron Ore next to a collector Crystal and link the Crystal to the ore. make a bunch of Starmetal Ingots. Craft the Telescope, Attunement Altar and Starmetal Cutting Tool. Finally, the Celestial Altar.

"},{"location":"atm6/astralsorcery/#constellation","title":"Constellation","text":"

Get the Starlight Infuser. Get one of your Rock Crystals and throw it in Liquid Starlight together with Starmetal Dust. Craft the Iridescent Altar. Get the Starlight Infuser.

Astral Sorcery | CurseForge | Astral Perk Planner

"},{"location":"atm6/bees/","title":"Resourceful Bees","text":""},{"location":"atm6/bees/#resourceful-bees","title":"Resourceful Bees","text":"

With extra centrifuge tiers, up to creative, you\u2019ll be processing combs a long time. We highly recommend you make the in game bee guide called the beepedia, bee quests and of course the manual, fifty shades of bees (in your akashic tome) for more info.

"},{"location":"atm6/bees/#finding-bees","title":"Finding Bees","text":"

Make some bee jars for your adventuring. When you\u2019re out in the world, jar some bees. Keep an eye out for certain bees like the cobbee, oreo bee, and beediddy!

"},{"location":"atm6/bees/#bee-mechanics","title":"Bee Mechanics","text":"

You can either craft a hive or get one from out in the world. Bees will anger if they are inside or see you mine a hive. You can smoke a hive with a smoker or campfire underneath to calm the bees. Bees will retreat to thier home if its raining or at nighttime. Bees need a specific flower to pollinate before they will produce combs. Once a hive reaches honey level 5 you can use a scraper to harvest the combs.

Mutating Bees
graph LR\nW[Wither] -- Dragon Egg --> D[Dragonic]\nD2[Dragonic] -- All The Modium --> A[All The Modium]\nA2[All The Modium] -- Vibranium --> V[Vibranium]\nV2[Vibranium] -- Unobtainium --> U[Unobtainium]\nU2[Unobtainium] -- Soul Lava --> SL[Soul Lava]\nG[Gold] -- Netherite --> N[Netherite]

Bee Breeding Chart

Resourceful Bees | CurseForge

"},{"location":"atm6/draconicevolution/","title":"Draconic Evolution","text":""},{"location":"atm6/draconicevolution/#draconic-evolution","title":"Draconic Evolution","text":"

Draconic Evolution | CurseForge

"},{"location":"atm6/enchanting/","title":"Enchanting","text":""},{"location":"atm6/enchanting/#enchanting","title":"Enchanting","text":"

In ATM6, Enchantment Level are ignored when using Enchantment Applicator

"},{"location":"atm6/envtech/","title":"Environmental Tech","text":""},{"location":"atm6/envtech/#environmental-tech","title":"Environmental Tech","text":""},{"location":"atm6/envtech/#void-miner","title":"Void Miner","text":"

Is a multi-block structure added by Environmental Tech. It generates various ores, crystals, and botanicals using energy. It comes in 8 tiers.

"},{"location":"atm6/envtech/#introduction","title":"Introduction","text":"

There\u2019s 2 IO blocks that is needed for Void Miner. At-least 1 Item Output and 1 Energy (FE) Input IO Block, though more can be used. When supplied enough power via FE Input IO\u2019s, the Void Miner (Based on Tick Duration) will output items of various types through the Item Output IO.

This process can be sped up by using Frequency modifiers, placing them in the Void Miner modifier slots. Specific items can be made more likely to appear by using a colored Laser Lens, while this effect can be amplified by using Amplification modifiers.

Void Miner also requires it\u2019s Laser Core to have a straight view to either Bedrock or The Void in order to work.

Transparent blocks such as Glass, walls, or fences may be used to provide a safe path under the structure without blocking the beam.

"},{"location":"atm6/envtech/#modifiers","title":"Modifiers","text":"

Modifiers are optional to use / replaced with Null Modifiers if you cannot afford to craft them. You can use higher and lower tiers of Modifiers and IO\u2019s on any tier Void Miner multi-block, such as Tier 5 Frequency Modifiers on a Tier 2 Void Miner multi-block. This is important to note, as the Tier 1 Void Miner needs more power than one Tier 1 FE Input can give the multi-block. The solution is to either use your first two Erodium to upgrade your FE Input, or to use two Tier 1 FE Inputs on your Tier 1 Void Miner.

What is Duration & Tick Costs? Duration Is how long it will take the miner, provided that it has the tick cost worth of energy supplied, to generate an item. Tick Cost Is the energy required per tick to allow the miner to mine at the maximum speed that is currently possible with all modifiers included. If you don\u2019t provide the tick cost amount of energy or more then your Void Miner will be slower. View Modifiers Frequency | Speeds up miners - Duration.
Increases the speed of the Void Miner operation. This is visually displayed on the Void Miner CCU labeled as 'Duration'. Duration is measured in ticks needed per operation. 20 ticks is equal to 1 second in real life if you are running at 20 FPS. 1,000 Duration (or 1,000 ticks) is equal to 50 seconds. \n\nThe Duration is lowered by upgrading your Frequency Modifiers, or by adding more Frequency Modifiers. Once your Duration hits 0, the item generation rate cannot go faster. Any further Frequency Modifiers will not affect the Void Miner's speed. They will only increase the Tick Cost.\n
Bandwidth | Increases amount of mined items
Increases the possible maximum stack size of each mined drop up to 64 items per single operation. Bandwidth Modifiers cannot be crafted until you generate Tier 5 Ionite Crystals at Tier 4 Void Miner (Pladium). Without any Bandwidth Modifiers, a Void Miner will produce 1 item per operation always\n
Amplification | Gives Lenses more Accuracy (High Drop Rate).
Increases the chance of getting the preferred ores with the Colored Lens the player is using. This is not a commonly used Modifier as in the later tiers of the Void Miner you will be producing hundreds of ores in fractions of a second (lmao)\n\nFor example:\n    - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / No Lens = 5.61% chance for Gold Ore at 180 Duration (one operation per 9 seconds)\n    - Tier 2 Void Miner / Four Tier 2 Frequency Modifiers / Yellow Lens = 32.22% chance for Gold Ore at 180 Duration\n    - Tier 2 Void Miner / Four Tier 2 Amplification Modifiers / Yellow Lens = 38.24% chance for Gold Ore at 320 Duration (one operation per 16 seconds)\n
Dimensional
Allows Void Miner to gain any drop in the current dimension and requires two Tier 5 structure frames to craft. Interdimensional Modifier allows Void Miner to gain any drops from any dimension. \n
Piezo
Allows solars to gen in rain/thunderstorms from vibrations.\n
Electrostatic
Allows Lightning rods to gen passively in rain and thunder.\n
Radian
Allows lightning rod to gen passively in sunny weather.\n

Note: Modifiers also have tiers based on crystal tiers respectively

"},{"location":"atm6/envtech/#flash-memory","title":"Flash Memory","text":"

Creating a Flash Memory Card for Void Miner is vital for Void Miner resource generation. The Flash Memory tells Void Miner from which loot table you want to generate resources from.

  • Craft a Flash Memory and a Memory Programmer
  • Give the Memory Programmer power and place the Flash Memory in the top right box
  • Select the Miner Program you want to run, taking note of the link below

Void Miner needs to generate Crystals from Environmental Tech to upgrade to the next tier. These Crystals are generated through the Multi-Miner section of the Memory Programmer using the Crystal Program.

"},{"location":"atm6/envtech/#lens","title":"Lens","text":"

Lenses are crafted with 5 glass in a + pattern in any crafting grid. You will need to also craft a Lens Grinder and supply it power to color your crafted Lens. Using lenses inside the Lens Holder on the Void Miner will increase the mine rate of certain items.

For example, if you used a Yellow Lens on a Metallic Flash Memory Program, your miner would produce more Gold Ore than it usually would without the lens. You can also increase that rate even further using Amplification Modifiers.

"},{"location":"atm6/envtech/#crystal-lens","title":"Crystal Lens","text":"

Crystal Lenses can be crafted by placing 3x3 of the same tier crystals in a crafting grid to create a Crystal Block. Use this Crystal Block in the Lens Grinder. Crystal Lenses are highly encouraged to be used. Crystal Lenses often double the chance of generating the crystal matching your Lens.

"},{"location":"atm6/envtech/#tiers","title":"Tiers","text":"View Tiers
  • Litherite: 27 Litherite
  • Erodium: 70 Erodium, 32 Litherite
  • Kyronite:194 Kyronite, 94 Erodium, 48 Litherite
  • Pladium: 224 Pladium, 224 Kyronite, 114 Erodium, 58 Litherite
  • Ionite: 276 Ionite, 278 Pladium, 278 Kyronite, 142 Erodium, 72 Litherite
  • Aethium: 362 Aethium, 358 Ionite, 358 Pladium, 358 Kyronite, 182 Erodium, 92 Litherite
  • Nanorite: 378 Nanorite, 558 Aethium, 374 Ionite, 374 Pladium, 374 Kyronite, 190 Erodium, 96 Litherite
  • Xerothium: 410 Xerothium, 606 Nanorite, 606 Aethium, 406 Ionite, 406 Pladium, 406 Kyronite, 206 Erodium, 104 Litherite
Tips & Tricks

Seg: You know you can use T6 modifiers with T5 void miner, right?

Bamboo: The inter-dimensional modifier requires one bandwidth modifier (on the right) and one amplification modifier (on the left)

"},{"location":"atm6/envtech/#void-miner-drops","title":"Void Miner Drops","text":"Void Miner Drops Based On Lens Mineral Resource Drops Ore Color Dimension Draconium Purple All Sulfur Yellow All Cinnabar Brown Overworld Coal Black Overworld Redstone Red Overworld Niter White Overworld Glowstone Yellow Nether Biotite Light Grey End Magical Resource Drops Ore Color Dimension Arcane Crystal Grey All Dark Runestone Grey All Rock Crystal White All Runestone Grey All Starmetal Blue All Stella Arcanum Grey All Vinteum Blue All Xpetrified Green Overworld Inferium Green Overworld Prosperity Light Grey Overworld Gemstone Resource Drops Ore Color Dimension Apatite Light Blue All Certus Quartz Light Blue All Charged Certus Quartz Light Blue All Dimensional Shard White All Ruby Red All Sapphire Blue All Diamond Cyan Overworld Emerald Lime Overworld Fluorite Pink Overworld Lapis Blue Overworld Nether Quartz White Nether Metallic Resource Drops Ore Color Dimension Tin Grey All Uraninite Green All Aluminum White Overworld Copper Orange Overworld Gold Yellow Overworld Iron White Overworld Lead Purple Overworld Nickel Grey Overworld Osmium Light Blue Overworld Platinum Light Blue Overworld Silver Light Grey Overworld Uranium Green Overworld Yellorite Green Overworld Zinc Pink Overworld Ancient Debris Brown Nether Cobalt Blue Nether Nether Gold Yellow Nether AllTheModium (T3+ - T6 20x More) Yellow End Vibranium (T4 - T7 10x More) Green End Unobtainium (T5 - T8 10x More) Purple End Rocky Resource Drops Ore Color Dimension Crying Obsidian Purple All Obsidian Purple All Bone White Overworld and Nether Mica None Nether and End Andesite Light Grey Overworld BOP Sandstone Based on Colour Overworld Cobblestone Grey Overworld Diorite White Overworld Granite Pink Overworld Orange Sandstone Orange Overworld Red Sandstone Red Overworld Sandstone Yellow Overworld Stone Grey Overworld Terracotta Based on Colour Overworld Basalt Black Nether Blackstone Black Nether Gilded Blackstone Black Nether Magma Block Orange Nether Netherrack Red Nether Endstone Yellow End Frozen Resource Drops Ore Color Dimension Black Ice Black Overworld Blue Ice Light Blue Overworld Dry Ice White Overworld Ice Light Blue Overworld Snow White Overworld Loose Resource Drops Ore Color Dimension Gravel Grey OW and Nether Black Sand Black Overworld Blue Sand Light Blue Overworld BYG Glowcelium Brown Overworld Clay Light Grey Overworld Dirt Brown Overworld Limesand Light Grey Overworld Meadow Dirt Brown Overworld Mud Brown Overworld Origin Grass Green Overworld Peat Brown Overworld Pink Sand Pink Overworld Purple Sand Purple Overworld Sand Yellow Overworld Sponge Yellow Overworld White Sand White Overworld Grassy Netherrack Green Nether Nylium Soul Sand Green Nether Quartzite Sand White Nether Soul Sand Brown Nether"},{"location":"atm6/envtech/#solar-panel","title":"Solar Panel","text":"

Environmental Tech | CurseForge

"},{"location":"atm6/faq/","title":"F.A.Q","text":""},{"location":"atm6/faq/#faq","title":"F.A.Q","text":"How do I get started?

If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide.

Is there a list of mods?

Yes, on CurseForge

How to chunk load chunks?

Chunkloading is handled by FTB Chunks. Open your map where you claim chunks and once you have a chunk claimed, shift click that same chunk. It should show a red X through the chunk, showing that it is force loaded.

Where can I find AllTheModium, Vibranium, & Unobtanium?

Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book.

How do I deal with the Chaos Dragon?

The chaos guardian is a multi-phase fight. The crystals can only be damaged by the dragon and it\u2019s attacks -or- chaos tier weapons, but the final hit on them will have to come from you to destroy them. Once all the crystals are destroyed, only half the time will it be susceptible to damage, when it doesnt have a blue shield. It has two health bars as well - a red over shield and then its actual HP.

How do you auto enchant to get OP enchants beyond vanilla?

Check out the Enchanting Guide!

"},{"location":"atm6/iceandfire/","title":"Ice & Fire","text":""},{"location":"atm6/iceandfire/#ice-fire","title":"Ice & Fire","text":"

Dragons only spawn in The Other dimension which you can reach by using a Teleport Pad in the Nether. (Shift-right click with an empty hand, and nothing in offhand). Most of other ice and fire structure spawns are disabled.

"},{"location":"atm6/iceandfire/#finding-dragons","title":"Finding Dragons","text":"

Travel 800 blocks from spawn in The Other, and look for specific dragons in specific biomes. Natures Compass and Spectral Eye Amulet will help. There is also a scrying ritual from Ars Nouveau that can locate chests. In addition, Corrupted Chorus Fruit can be used to \u2018noclip\u2019 through blocks, allowing you to move quickly through them and see where you\u2019re going. Higher tier dragons are in underground roosts around y35.

"},{"location":"atm6/iceandfire/#biomes","title":"Biomes","text":"
  • Lightning: The Other: Desert, The Other: Desert Hills
  • Fire: The Other: Basalt Deltas
  • Ice: The Other: Mountains
"},{"location":"atm6/iceandfire/#looting","title":"Looting","text":"

Right click with empty hand on a dead dragon corpse too loot it.

Note: Obtain Dragon Blood by right clicking a dragon corpse with a bottle. This changes the loot table so you only get bones, blood, and skulls.

"},{"location":"atm6/iceandfire/#forges","title":"Forges","text":"

For each Dragon Forge,

  • Lightning: Unobtainium-Allthemodium
  • Fire: Vibranium-Allthemodium
  • Ice: Unobtainium-Vibranium

Note: Blocks (including Compressed) can be used instead of dusts, and or ingots

Ice & Fire Dragons | CurseForge

"},{"location":"atm6/mekanism/","title":"Mekanism","text":""},{"location":"atm6/mekanism/#mekanism","title":"Mekanism","text":"

To get started in Mekanism you just need coal, osmium, redstone and iron to make some steel. The Official Mekanism Wiki has a lot of information on the setup of machines and how they can be used. Also, the Surviving with Mekanism series by RagePlaysGames is top notch! Every video has chapters so you can easily skip to the section you need, and each video is divided into intro, mats, crafting, building, and how to use. You can\u2019t go wrong.

Fission Reactor Diagram
graph TD\nW(((Water))) --> ES_O[Electrolytic Separator]\nS(((Sulfur))) --> CO_SD[Chemical Oxidizer]\nU(((Uranium)))\nES_O -- Oxygen --> CO_SD -- Sulfur Dioxide --> CI_ST[Chemical Infuser]\nW --> RC_WV[Rotary Condensentrator]\nCI_ST -- Sulfur Trioxide --> CI_SA[Chemical Infuser]\nRC_WV -- Water Vapor --> CI_SA\nF(((Fluorite))) --> CDC_HA[Chemical Dissolution Chamber]\nCI_SA -- Sulfuric Acid --> CDC_HA\nCDC_HA -- Hydrofluoric Acid --> CI_UH[Chemical Infuser]\n\nU ----> EC_YCU[Electrolytic Separator]\nEC_YCU -- Yellow Cake Uranium --> CO_UO[Chemical Oxidizer]\nCO_UO -- Uranium Oxide --> CI_UH\n\nCI_UH -- Uranium Heaxfluoride --> IC_FF[Isotopic Centrifuge]\nIC_FF -- Fissile Fuel --> R{REACTOR}

Accidentally leaked radiation? /mek radiation removeAll, /mek radiation heal

Mekanism | CurseForge

"},{"location":"atm6/pedestals/","title":"Pedestals","text":""},{"location":"atm6/pedestals/#pedestals","title":"Pedestals","text":"

The mod that can do just about anything.... But how?

"},{"location":"atm6/pedestals/#linking-tool","title":"Linking Tool","text":"

With a diamond and some dye, your first step into pedestals is the linking tool. This tool will allow you to make blank pedestals and blank upgrades for the pedestal

"},{"location":"atm6/pedestals/#cobblestone-generator","title":"Cobblestone Generator","text":"

Your next step should be the cobblegen. Place a pedestal and put the cobblegen upgrade in your offhand and then right-click the pedestal to apply it. If you want to link two pedestals, shift right-click with the linking tool on the recieving pedestal and then do the same to the sending pedestal.

"},{"location":"atm6/pedestals/#enchanting","title":"Enchanting","text":""},{"location":"atm6/pedestals/#force-enchanting","title":"Force Enchanting","text":"

Pedestals | CurseForge

"},{"location":"atm6/silentgear/","title":"Silent Gear","text":""},{"location":"atm6/silentgear/#silent-gear","title":"Silent Gear","text":"

The possibilities are endless with Silent Gear. The examples below simply show a few possibilities, out of the thousands of potential combinations.

"},{"location":"atm6/silentgear/#blueprints","title":"Blueprints","text":"

Silent Gear can be very simple or very complex. Make yourself a blueprint and then surround that blueprint with mats needed. For example, if you have a pickaxe blueprint, you will need the blueprint, handle and 3 ingots. The materials used and order matter very much!

"},{"location":"atm6/silentgear/#beyond-the-basics","title":"Beyond The Basics","text":"

Check out these links for some additional information on material and additional guides.

Material Spreadsheet | General Silent Gear Info | Early Game Tools | Late Mid Game Tools |

"},{"location":"atm6/silentgear/#custom-constructions","title":"Custom Constructions","text":"Fireite Uru Paxel Fireite Uru Katana Fireite Uru Sword Fireite Uru Machete Fireite Uru Bow Gem & Ingot

Silent Gear | CurseForge

"},{"location":"atm6/woot/","title":"Woot","text":""},{"location":"atm6/woot/#woot","title":"Woot","text":"

Woot | CurseForge

"},{"location":"atm6/enchanting/applicator/","title":"Enchantment Applicator","text":""},{"location":"atm6/enchanting/applicator/#enchantment-applicator","title":"Enchantment Applicator","text":"

Enchantment Applicator is a machine in Industrial Foregoing. It\u2019s used to apply enchantments like an anvil, however it can also grant an additional enchantment level when combining the same enchantment level of an Item and an Enchantment Book, ignoring enchantment levels to reach a max of level 255 (CCLV)!.

This process will require a Black Hole Tank (Preferably Supreme), and Liquid XP or Mob Essence inside the tank on top of the applicator to function properly. Using Liquid XP will only increase enchantment level up to 20 (XX), afterwards will require Mob Essence.

After gaining an additional enchantment level, you\u2019ll want to duplicate the enchant. There\u2019s 2 known ways,

"},{"location":"atm6/enchanting/applicator/#duplicating-enchants","title":"Duplicating Enchants","text":"
  • Disenchant and use Botania Mana Enchanter to duplicate enchantment books on a new Item.
  • Duplicate Item using Mahou Projection. (Only works with certain tools, NOT ARMOR).
    • Armor enchants can be forced on tools using Pedestal Anvil

Using the same Item in applicator will increase Repair Costs, making combining enchants more expensive!

"},{"location":"atm6/enchanting/applicator/#making-essence","title":"Making Essence","text":""},{"location":"atm6/enchanting/applicator/#converting-liquid-xp","title":"Converting Liquid XP","text":"

XP Liquid can be converted to Mob Essence using PneumaticCraft Aeriel Interface.

  • Craft a Dispenser Upgrade, and placed inside Aerial Interface.
  • Change Dispesser Upgrade configuration for Mob Essence.
  • Apply 15 Bars of pressure to Aerial Interface.
  • Pump XP Liquid in -> output Mob Essence
"},{"location":"atm6/enchanting/applicator/#converting-xp-orbs","title":"Converting XP Orbs","text":"

XP Orbs can be converted to Mob Essence using Modular Routers. Any best way you can generate and feed Modular Router XP Orbs, but be careful that XP Clumps can cause issues.

One way this can be done is growing Mystical Agriculture experience essence.

You will need,

  • RFTools Craft (Crafts Essence into Experience Droplets)
  • A Modular Router
  • 9 Speed Upgrades
  • Activator Module (For Modular Router to consume and spit out XP Orbs)
  • Vacuum Module (To Collect XP Orbs)
  • XP Vacuum Augment (Placed inside Vacuum Module, convert to convert XP Orbs into Mob Essence)
  • Fast Pickup Augment (Placed inside Vacuum Module to make Vacuum Module collect faster)
Module Router will consume given experience droplets and spit out XP Orbs. Vacuum module will collect the XP Orbs from configured face(s). XP Vacuum Augment will convert the consumed XP into Mob Essence, which will then be automatically outputted to a tank configured face of the Modular Router."},{"location":"atm6/enchanting/applicator/#woot","title":"Woot","text":"

Using Woot, you can install the Summit perk. This will output Mob Essence through Fluid Output each operation (simulated mob death). The best mob to use one that has the most HP.

Enchants can be forced onto any item using Pedestal Anvil!

"},{"location":"atm6/enchanting/botania/","title":"Botania Mana Enchanter","text":""},{"location":"atm6/enchanting/botania/#botania-mana-enchanter","title":"Botania Mana Enchanter","text":"

Botania Mana Enchanter is a structure added by Botania. It uses Mana provided with Sparks or Mana Spreaders to enchant equipment with enchantments defined by Enchanted Books dropped nearby, without consuming the books. This is the slowest, yet only way to automate the process of duplicating and enchanting books using the applicator.

"},{"location":"atm6/enchanting/botania/#building-enchanter","title":"Building Enchanter","text":"

Botania Mana Enchanter and Enchantment Applicator can both be automated with the required materials.

Materials
  • 3 Routers
  • 3 Activator Modules
  • 1 Wand of the Forest
  • 17 Obsidian
  • 1 Lapis Block
  • 1 Mana spark
  • 6 Mana Pylons
  • 10 Dirt/Grass blocks
  • 10 Mystical Flowers
  • 1 Cyclic Dropper
  • 3 Building blocks
  • 1 Cyclic Item detector
  • 2 Redstone
  • 1 Redstone Torch
  • 1 RFtools Timer
  • 1 Vacuumulator
  • 5 Pipez (+1 upgrade for filtering)
  • Black hole Tank
  • Enchantment Applicator
  • Disenchanter
  • Entangled Block
  • Trash can

Build the Multi-Block structure shown below. Botania Lexica will help visually seeing block positions, then place down 3 Modular Routers facing into the Mana Enchanter, as shown below.

"},{"location":"atm6/enchanting/botania/#routers-configuration","title":"Routers Configuration","text":"Activator Module for ALL 3 routers should look like this. Set the the FRONT face directory (middle part of GUI) as shown below. Left RouterTop RouterRight Router

Tool/Weapon input, keep this fed with new tools or weapons. (Ex: RS with crafting card). Be sure this is always full with a tool and set it to Pulse

Tool/Weapon Output. Be sure to set this to Redstone Mode: High

Wand Of The Forest. Give it speed upgrades if possible and a wand of the forest and set it to always on, this router always tries to start an enchanting process

"},{"location":"atm6/enchanting/botania/#automation-setup","title":"Automation Setup","text":"

Place a Cyclic Dropper 1 block away from the Enchanter and set to Always Active. Place an Item Detector ontop of the bottom left flower, and a redstone line on the LEFT router

Info

The Dropper will drop an enchanted book triggering the Item detector, which triggers the LEFT router, which then puts 1 tool into the Enchanter. The RIGHT Router (with the Wand of the Forest) will iniate the enchanting process.

  • Place 3 blocks (as shown below)
  • Redstone Torch on the TOP router (against left block)
  • RFTools Timer (100 Delay, with \u201cPause while redstone is active\u201d enabled) on 3rd block facing right
  • Vacuumulator with redstone on top (Set Redstone Control HIGH).

Setup pipes to pull out from the TOP router (Enchanted Tool), and the Vacuumulator (Enchanted Book).

Pipes will then go into the Enchantment Applicator. Black Hole Supreme Tank on top of the Enchantment Applicator.

Info

Enchanting higher levels will take more than 64 buckets (internal applicator buffer) of XP/Essence, which a Black Hole Tank will be required on top of the applicator to act as a secondary buffer. Liquid XP will work up too level 20, afterwards Mob Essence will be required. The Applicator page will explain best methods of generating XP or Mob Essence.

Pipe the new combined Tool out of the Applicator and put it into a Cylic Disenchanter to split the 2 again

Add a pipe, an Entangled block (linked to the Dropper at the beginning) and a Trashcan. Now set filters in your Pipez extraction point together with a destination tool. This makes the Book go in a loop and come back to the start of the cycle

Rightclick the side of the Entangled block which has the pipe leading into it with the destination tool, add the Book to the filter and remove the NBT tag so all books go to the dropper

do the same with your pickaxe, remove the NBT data, so all (old) tools go to the bin

That should look something like this

Dont forget to put a spark on your Mana Enchanter and get a decent Mana Supply! put a book into the dropper and the whole process should work automaticly.

Botania | CurseForge

"},{"location":"atm6/enchanting/mahou/","title":"Mahou Projection","text":""},{"location":"atm6/enchanting/mahou/#mahou-projection","title":"Mahou Projection","text":"

The first use of this scroll memorizes a tool or weapon you\u2019re looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability. It drains mana from the caster each time the scroll is used

"},{"location":"atm6/mahou/","title":"Mahou","text":""},{"location":"atm6/mahou/#mahou","title":"Mahou","text":"

Mahou Tsukai Morgan and You, Originally created by Xarrah, BigFire, & Ultramega

"},{"location":"atm6/mahou/#step-1-set-your-keybinds-for-draw-mahoujin-mine-is-set-to-numberpad-3","title":"Step 1: Set your keybinds for Draw Mahoujin (mine is set to numberpad 3)","text":""},{"location":"atm6/mahou/#step-2-craft-a-dagger-from-mahou-tsukai","title":"Step 2: Craft a Dagger (From Mahou Tsukai)","text":"
  1. Use the dagger (hold in main hand and right click anywhere) to inflict \u2018Bleeding\u2019 (lasts 15 seconds)
  2. Quickly slap the hotkey you\u2019ve assigned your \u2018Draw Mahoujin\u2019 keybinding to

This will create a Mahou blood projection!

For each Boundary of Drain Life, you will need:

  • 2 Powdered Iron
  • 1 Powdered Emerald (From MAHOU! NOT DUSTS)
"},{"location":"atm6/mahou/#step-3-discover-blood-projections","title":"Step 3: Discover Blood Projections","text":"

Right click the blood projection with the two Powdered iron, and one powdered emerald. Then right click to activate

"},{"location":"atm6/mahou/#notes","title":"Notes","text":"

Fastest to set up is probably durability drain, where you cycle a bunch of low tier gear/tools across a bunch of chests, and set your storage system to keep them in stock (or pipe them out right before they break to a diamond anvil) - BigFire

another one is the popular life drain with mob farm. you\u2019d probably want 20-40 of these circles down and a really quick spawner. need good garbage collection and xp collection for this else it\u2019ll lag/crash server. also not so good for server performance - BigFire

Continue To Caliburn

Mahou | CurseForge

"},{"location":"atm6/mahou/book/","title":"Mahou Book","text":""},{"location":"atm6/mahou/book/#mahou-book","title":"Mahou Book","text":"

A mahoutsukai, simply, is a magic user. And congrats! You are one such magic user.

Let\u2019s first see how to draw a circle in blood. It\u2019s easy - just take damage, and quickly use the keybind to draw a circle in blood on the floor. If successful, you\u2019ll see a blood circle on the ground, and a mana bar (Mahou X/Y) somewhere on your screen. Note: there is a dagger to damage yourself, if you prefer.

Alarm Boundary

The Alarm Boundary is perhaps the most basic of boundary magic - it simply alerts you to mobs and players as they enter the range of the boundary.

It drains mana from the caster every second(s).

Alarm boundaries will also output a comparator value of 15 when it detects anything in the boundary.

Alchemical Exchange

This circle will, once a day around the time of placement, convert blocks underneath it into random other blocks of the same class. For example, dirt may become sand, diamonds may become emeralds, etc. However, this only works on natural blocks, and will not work on things such as bricks or diamond blocks.

It drains mana from the caster per transformation.

Ascension

This spell, when used without a cloth, will teleport any thing (including items and mobs) on top of it to the highest solid Y value it can find. The scroll version of this spell will simply transport the caster.

It drains mana from the caster per teleport.

Binding Eyes

When used, eye contact between the caster and any mob or player binds that mob or player in place. Players, however, can escape this binding by simply breaking eye contact.

It drains mana on use.

Black Flame Eyes

When used, black flames will sprout at the caster\u2019s viewing location for a short time. These flames spread somewhat quickly, but do not consume blocks and inflict wither damage to those who come in contact with them.

It drains mana from the caster on use.

Borrowed Authority

Borrow the authority of the gods with this scroll, which increases the caster\u2019s speed and power, to the extent that mobs hit while using it will break through walls.

It drains mana from the caster on use.

Boundaries

Boundaries are a category of AOE spells which operate in a radius around a placed circle, and drain mana on a fixed basis. You can turn them on and off by right clicking them. A redstone signal will also invert their on/off status.

Boundaries give off comparator output - 0 when off, 1 when on.

Lastly, boundary scrolls can be used to quickly place boundaries in another location.

Butterfly Effect

When this scroll is used, the caster is granted Foresight for a short duration. During this time, breaking/placing a block, or swinging a weapon will be delayed for the future. A butterfly will mark the spot, and things colliding with this butterfly will trigger its effect.

WARNING: DO NOT USE ON IMPORTANT BLOCKS.

This spell drains mana from the caster upon use.

Catalyst Exchange

When placed on the floor, this circle will convert any powdered catalysts on top of it into a new random powdered catalyst.

It drains mana from the caster per transformation.

Catalysts

There are seven catalysts representing each of the known categories of magic. Powdered Catalysts are created by taking a Hammer or a Mortar and Pestle, and smashing these catalysts.

The categories are:

  • Iron - Boundaries
  • Ender Pearl - Displacement
  • Diamond - Projection
  • Emerald - Exchange
  • Gold - Mystic
  • Quartz - Intelligence
  • Ender Eye - Mystic Eyes
Categories
  • Boundaries deal with AOE effects centered on a magic circle.
  • Displacement spells deal with teleportation magic.
  • Projection spells deal with weapons.
  • Exchange spells usually involve a trade of some sort, often to refund or generate mana.
  • Mystic spells are unique, often offensive spells, which provide miscellaneous effects.
  • Mystic Eyes spells deal with sight based effects.
  • Intelligence spells deal with decision making, often focused around entities.

There are also some rumored secret spells..

Chronal Exchange

When placed on the floor, this circle will generate mana for 12 hours, centered on the time of placement. For the other 12 hours, it will drain mana from the caster, gems, or mana circuits.

It will drain or restore up to mana every so often, depending on how far it is from its peak. Note that skipping time will only delay the cycle, instead of skipping it.

Circuits

Mana Circuits are blocks which store mana. Mana in them can be used by the player when nearby, as long as the player owns the block. Whoever right clicks a mana circuit first after it is placed owns the block. Right click to put mana in. Shift right click to turn it on or off. Mana Circuits can be right clicked with Fae Essence to open them to use by other players.

Clairvoyance

When used, the caster will be able to see the predicted path of certain mobs. Unfortunately, some mobs are an enigma and cannot be predicted accurately, such as skeletons.

It drains mana on use.

Clarent

A strengthened sword forged in dragon\u2019s breath, Clarent has one purpose: to overthrow the king.

Rather than retaining a damage value, Clarent instead does the damage of its opponent\u2019s weapon.

Clarent\u2019s passive, Vengeance, allows it to block attacks. Clarent remembers these attacks, and in its next attack will release its pent up frustrations.

Lastly, Clarent has the ability to mortally wound its target, leaving them wounds that will damage them should they move too quickly.

Contract

When two players create their own contract circles, and stand on them nearby, a contract will be formed between the players. Contracts allow players to bypass certain effects such as boundaries and some mystic eyes. To break a contract, one player need only damage the other.

It drains mana from each player when a contract is formed.

Cup Of Heaven

The most complex spell, and used primarily as a way of applying mass negative effects. When many of these circles are placed on the floor and activated by a scroll, the external convex polygon (google: Graham Scan) is calculated. The prime factors in the external polygon and those in the internal polygon determine the negative effects. All mobs and players within the external polygon at the time of activation receive these effects.

For example, if a pentagon is made with 5 of these circles, with 4 internal circles (placed anywhere inside the pentagon), the affected mobs will receive Poison 2 and Blindness 1. Why? 4 = 2 * 2. The prime factor 2 maps to poison, and the prime factor 5 maps to blindness. These prime factors go up to 13, including Poison (2), Weakness (3), Blindness (5), Slowness(7), Wither (11), Levitation (13).

For a cup of heaven which grants poison 1 and wither 1, for example, you could simply create a 22-sided polygon and all mobs inside would be affected.

Mana cost varies depending on the effects and area covered.

Damage Exchange

When used, the player will convert damage taken into mana a set number of times (not time-based).

It drains mana on use.

Damage Replication

When used on another mob or player, this scroll will replicate damage and potions that affect the caster to the target.

It drains mana on using the scroll.

Death Collection Eyes

When used, the caster collects souls upon seeing death - this death can occur in any way, but the caster does have to be looking at it. If the caster has collected enough souls, their death will be prevented in exchange for souls, whether or not the eyes are active.

It drains mana from the caster on use.

Displacement Boundary

The Displacement Boundary teleports entities that attempt to enter the range of the boundary to the other side of the boundary. In doing so, it will attempt to displace blocks that would suffocate said entity.

It drains mana from the caster every second(s).

Drain Life Boundary

The Boundary of Drain Life slowly drains health from nearby mobs in a range of. For every health drained, health, hunger, or mana is restored to the caster, in that order, according to the caster\u2019s needs.

It drains mana from the caster every second(s).

Durability Exchange

When placed on the floor, this circle will convert the durability of items on top of it into mana. Alternatively, it can do so from a chest underneath it as well.

It can restore a maximum of mana per second. Note that higher durability items are consumed faster.

Emrys

A staff named after it\u2019s original owner, a backwards mage who couldn\u2019t decide which weapon was his favorite, Emrys is intended to be used in the off-hand. It provides strength in the form of lightning to an empty right hand, melee weapons, and some projectile weapons.

The mage who created the staff luckily documented his struggles - simply get struck by lightning while holding a strengthened stick.

Enclosure Boundary

The Enclosure Boundary raises the floor around you to create a makeshift set of walls with radius.

It drains mana from the caster for every layer of blocks that it raises.

Equivalent Displacement

An Equivalent Displacement circle on the ground can be linked (by shift-right-clicking) to another equivalent displacement circle anywhere in the world or across dimensions. However, a teleport between the two can only happen if there is something on BOTH circles. That something can be an item or mob, and the chunks must be loaded.

It drains mana from the caster per teleport.

Explosion Staff

This scroll summons a staff with explosive power. The staff has a long charge up time (the beam in the middle indicates readiness), and creates a large explosion. Shift right clicking with the staff will change it to fire multiple, smaller, explosions, and shift right clicking again will enable a beam mode.

When in beam mode the staff\u2019s damage accelerates the longer the beam is held. Also, the beam will destroy blocks it comes in contact with.

The scroll drains mana from the caster, mana when using the large explosion mode, mana when using the AOE explosion mode, and mana per tick when using the beam mode.

Fae

The Fae are spiritlike creatures that occasionally roam the earth. Like leylines, they can also only be seen with Mystic Eyes of Fay Sight. Their laughter sounds like bells, and they drop Fae Essence upon death.

The Fae are particularly attracted to magic being performed on leypoints.

They are breedable through the use of any Powdered Catalyst.

Fae Essence

Fae Essence is dropped by the fae. Right clicking with fae essence will place a fae circle. Scrolls and stationary circles created by fae essence can be used by anyone. You can claim a fae circle by right clicking it, and it will drain mana from you when used. Most importantly, because Fae Essence is not bound to a user, it is ideal for automated scroll creation.

Faecake

Like a cupcake, but with fae essence. Watching you eat this disgusts the Fae, to the point where they will avoid you even if you perform magic on a leypoint. Reawakening the Mystic Eyes of Fay Sight is a good way to get rid of the effects of the faecake, as the Fae are quite partial to those who can see them.

Fallen Down

Give your friends, enemies and acquaintances the burial they deserve! It may be best not to do this near things you care about, though.

This spell costs mana every fifth of a second. Naturally, the longer you channel it, the deeper the grave. Your friends should thank you, really. Note: Flight is a natural counter to this spell.

If you shift right click with a Fallen Down scroll, it will switch to beam mode, which will terraform and burn the surrounding mobs and land.

Familiar Exchange

When used, the caster will switch places with the familiar if it exists.

It drains mana from the caster on use.

Familiars Garden

When used while a familiar is active, the familiar will activate its garden. Mobs and players in the garden will not be able to harm each other. The affected area moves with the familiar, and particles are produced to show the area.

It drains mana from the caster on use.

Fay Sight Eyes

Very simply, this spell allows the player to see Leylines and the Fae.

It drains mana from the caster on use.

Fog Projector

The Fog Projector is a decorative block which can be used to display and control two types of fog - particle and camera-based. It allows you to control the color as well as thickness of each type of fog, along with other attributes.

Gandr

A primeval curse which gains power based on the user\u2019s magical capability. Requiring a percentage of the user\u2019s mana capacity, when fired, this curse scales damage depending on the amount of mana spent to fire it.

Furthermore, this curse will absorb and cleanse any negative effects the user may be experiencing, and spread them around its point of impact.

Geas

Geasa are self-imposed taboos. By placing a geas on oneself, you can prevent yourself from doing some undesirable things.

For example, using it on a player will prevent you from harming that player. Using it on a sheep will prevent you from harming any sheep.

Using it on a named sheep will prevent you from harming that specific sheep. Lastly, using it on a dropped item, will prevent you from picking up that item. Use it without a target to see your current geasa. Creating and removing geasa costs mana each, and having many geasa targeting unnamed mobs will regenerate mana.

Gems

If you craft an Attuner with a Diamond or Emerald, you can get an attuned gem. These gems will store mana for you, if you right click while holding the gem. Spells will automatically draw from any gems on your person.

Gravity Boundary

The Gravity Boundary increases the gravity for mobs other than the caster in an area of range.

It drains mana from the caster every second(s).

Immunity Exchange

This scroll can be used on either the player or something the player is looking at. The target of the scroll will take no damage from repeated damage sources, but will take double damage from a damage source that was different from the last one.

It drains mana from the caster on use.

Insight

The Mystic Eyes of Insight allow the user to see more information about a target, such as its inventory, and, in the case of living creatures, their buffs, debuffs, etc. The mana cost is per scroll.

Kodoku

Kodoku refers to the practice of encouraging conflict between a number living things, and then harnessing the strongest surviving thing\u2019s essence for power using special Kodoku worms.

Every time a monster kills something, their kodoku value goes up by 1, plus the kodoku value of the monster it killed. When you have a specimen with a high kodoku value, simply place a hungry kodoku worm on it (right-click) and kill the specimen.

When a worm consumes the essence of a mob with a high kodoku value, you can simply right-click to pick it up. Worms with high kodoku values have a number of uses.

When burned, these worms will generate mana for any nearby mana circuits. The amount of mana depends on how close to a leyline the burning occurred.

These worms can also be used for sympathetic magic.

Sympathetic Magic refers to a symbolic magic, in which a target can be affected remotely through the use of a symbol.

To use a scrying circle for sympathetic magic, it must be actively scrying something. Also, an inventory under the scrying circle must contain Kodoku worms to act as fuel. Worms with higher kodoku values will increase the chance of successful sympathetic magic.

When an active scrying circle with Kodoku worms underneath is set up, simply throw items for various effects on top of the circle.

  • Blaze Powder - Fire
  • Rabbit Foot - Hop
  • Splash Potions - Effects
  • Glowstone Dust - Glowing
  • Rotten Flesh - Hunger
  • Kodoku worms - Misfortune

Misfortune applies various effects such as being struck by lightning, dropping items, negative looting, tripping, breaking tools, increased aggro, with chances scaling depending on the quality of the worm.

  • Ender Pearl - Teleports target (Players must have a contract with caster to be teleported)
  • Nether Wart - Confusion

You can counter sympathetic magic against yourself by keeping a worm with a high kodoku value in your inventory. The higher the value, the less likely the magic will succeed against you, and there\u2019s even a chance it will be reflected to the caster.

Leylines

Leylines connect certain points throughout the world. They can only be seen with Mystic Eyes of Fay Sight. Being near a leyline or leypoint increases mana regeneration based on a percentage of your maximum mana.

The Fae spawn near leylines.

Furthermore, Leylines will boost elytra if you fly along the leyline.

Magic

To perform Magic, we need a few things - mana, (optionally, depending on the recipe) a cloth, a blood circle, and 3 powdered catalysts. If the recipe is for a scroll, you\u2019d put the cloth down first, and then draw a blood circle on top. Otherwise, simply put the circle on the floor. Take your powdered catalysts and right click the circle to add them to it.

Mana

Using mana increases your maximum mana capacity over time - it\u2019s like exercising. You will naturally recover some mana over time, depending on how full your hunger is. Sleeping will regen a good chunk of your mana, and sleep is important, so sleep often!

Mental Displacement

A mental displacement scroll allows the caster to temporarily leave his body behind and explore the world in a certain radius.

It drains mana from the caster on use.

Morgan

This wicked sword is the result of the corruption of the holy sword Caliburn. Obtained through the murder of a player\u2019s best and most loyal friend with the holy sword Caliburn, this sword obtains its power not from a mysterious lake, but from the killing of innocents.

Villagers, and more so, child villagers, provide a damage bonus for this sword (requires mana), and also heal any damage the sword has.

Holding right click with this sword releases a ball of evil to stab and pull nearby enemies. Lastly, pressing the keybind with the sword equipped provides a Rage effect, which very briefly boosts attack speed and walking speed.

Both of these abilities invoke a cooldown that prevents either from being used.

Mystic Code

The Mystic Code is an item which holds three stacks of scrolls. Shift right click opens the inventory. The keybind switches between the scrolls. Clicking or holding right click uses the currently selected scroll.

Mystic Code First Sorcery

The Mystic Code - First Sorcery is a variant of the mystic code, which has a set durability, but also allows for the reuse of scrolls it contains.

Ordered Displacement

An Ordered Displacement circle on the ground teleports any thing on top of it to a nearby Ordered Displacement circle. Which one it teleports you to depends on the order in which you placed the circles. You can sneak to stop teleporting.

It drains mana from the caster per teleport.

Power Consolidation

This circle, when placed on the floor, will spawn a lake. Each growth of the lake costs mana. When the lake has reached full size, the caster can throw in an enchanted sword in order to get Caliburn, a holy sword which will have the damage of the sword plus extra based on its enchantments. (hint: holier is better!)

Exchanging a sword costs mana.

The holy sword, Caliburn, has several properties. First, undead and unholy monsters will fear it and attempt to flee. Second, right-clicking will pull both the caster and such monsters closer. Using the keybind, the sword can smite such monsters, with a cooldown. As Caliburn is a sword, the Power Consolidation process can be repeated by simply enchanting it.

Caliburn seems to have some innate limits - maybe there are some items you could offer to the lake with Caliburn, as proof of your purity, to remove these limits?

Presence Concealment

A Scroll of Presence Concealment grants the user the two Rippers in exchange for mana.

When one Ripper is wielded, right clicking will create a thick fog around either the user, or a target the user was looking at. Doing the above with a Ripper in either hand will provide true presence concealment, in addition to the fog, rendering the player and his items invisible.

Because The Rippers are intended to be dual wielded, it is possible to attack with both simultaneously. Furthermore, attacking from behind a target with a Ripper will deal bonus damage.

Take note that your invisibility will disappear temporarily after you attack, but it will return shortly after. Monsters may or may not be able to track you after you disappear again, so it is recommended to move quickly.

Probability Alter

Place at least 2 of these circles on the floor within range of the caster, each with a chorus fruit (see config) on top.

The number of nearby circles with chorus fruits when the scroll version of this spell is used becomes the Modulus of the Rule Breaker given by the scroll. This scroll costs mana to use. See Rule Breaker\u2019s page for more details.

Projectile Displacement

A Projectile Displacement scroll teleports you to the last arrow you shot.

It drains mana from the caster on use.

Projection

The first use of this scroll memorizes a tool or weapon you\u2019re looking at (for the whole stack!). The second use gives you a copy of the tool with limited durability.

It drains mana from the caster each time the scroll is used.

Projector

The Mahoujin Projector is a decorative block, which simply displayes runes and a magic circle. Right clicking on the block allows you to configure the size, angle, color, speed, etc. You can load in custom circles and runes through the config.

The Mahoujin Projector is also wearable! Right click with an armor item on a projector to receive a special enchantment that displays that projector\u2019s settings. Right click again to get new settings after modifying.

Also, you can copy and paste from projector to projector by right clicking to copy, and shift right clicking to paste with a normal stick.

Protective Displacement

Ever wondered what it\u2019s like to be an Enderman? The Protective Displacement scroll will randomly teleport you when you would otherwise have been hit by an arrow.

It drains mana from the caster when used, and provides a set number of teleports - it is not time based.

Proximity Projection

Using this scroll grants the caster a weapon, which allows the caster to simultaneously teleport to and attack an entity they can see at long range.

It drains mana from the caster on use of the scroll.

Reality Marble

This scroll teleports the user (and optionally, a target the user is looking at) to a fixed spot in the Reality Marble. If the user has a target, one of the two must die for the other to leave. Otherwise, taking damage will allow the player to leave.

It drains mana from the caster on use.

Recall Familiar

When used, the player\u2019s familiar, if it exists, will be recalled to the player.

It drains mana on use.

Replica

When you\u2019re done defending yourself, it\u2019s about time you start defending your friends. Replica is a mainhand greatshield with a number of abilities, granted to those who have just about maxed out their defensive capabilities, yet still feel the need to use a shield.

Note the following controls carefully:

AOE Teleportation: Save a location with shift+right click. Teleport to it later, along with everything around you by blocking with the shield and pressing. Break a block with Replica to toggle teleporting friendlies only.

Cover Move: Sprint towards a teammate and block to place yourself between them and their closest, most threatening enemy.

Shockwave: Simply blocking with this greatshield is enough to knockback surrounding opponents, dealing damage according to the number of nearby allies you have.

Replicate: Replica has the ability to remember up to 6 damage types that it has blocked. You can choose Shockwave\u2019s damage type by pressing.

Note that allies refers to those for which the wielder of Replica has a geas or a contract with.

To get Replica, block an attack with a strengthened shield, in your main hand, while also having Immunity Exchange, maximum Damage Absorption stacks, above 15 armor, and over 100 Death Collection souls .

Retribution

A Scroll of Retribution exchanges the health percentage of the caster with the health percentage of the target. It drains mana based on the difference between the user and target\u2019s health. The cost is times the difference in health points.

Reversion Eyes

When used, mobs and players in the caster\u2019s view will lose their buffs, along with certain other qualities, depending on the mob. Water mobs will no longer breathe underwater - nether mobs will be affected by fire and lava. Endermen, Shulker boxes and the Wither will no longer be immune to arrows. Husks can catch fire in the sun.

It drains mana from the caster on use.

Rho Aias

This scroll creates a large shield in front of the caster in the direction it is used. Mobs bounce off of it, and various projectiles are deleted by it. If desired, the caster can also bounce on it by sneaking.

It drains mana on use.

Rhongomyniad

The Holy Lance, Rhongomyniad, is acquired by throwing a lance into the lake of a Power Consolidation ritual. The Lance Which Brings Stability to the World, Rhongomyniad, can first and foremost act as a normal lance - it can unseat opponents in a joust, depending on its weight and damage, and the speed of the rider. Furthermore, mounted wielders of Rhongomyniad will gain speed in the presence of evil.

Rhongomyniad can be placed using shift right-click, where it assumes its role as a purveyor of punishment. Evil creatures and persons, including those who would do harm to those who are not evil, will be smitten within Rhongomyniad\u2019s range, according to Rhongomyniad\u2019s current attack damage. This will continually drain mana. Right click on the placed lance to re-collect it.

Rule Breaker

Acquired through the use of the Probability Alter spell, this dagger allows the user to control their personal probability through the Modulus and Dividend of the dagger. While the modulus is set at creation, the dagger\u2019s dividend can be increased by shift right clicking. Specifically, when right clicking with Rule Breaker, the caster will receive a timed buff that returns a specific random number when requested from the player.

Furthermore, this effect is also applied when hitting things with the dagger.

Scrying

A Scrying circle on the ground allows the player to see a named mob or player from afar, for a short amount of time. Simply drop a nametag on the circle, and if a mob or player with this name exists, it will be shown with its surroundings.

It drains mana from the caster per nametag.

Selective Displacement

Use this scroll to receive a buff. While active, tap the0 keybind to swap places with a target entity. Alternatively, hold the keybind to select two entities, and switch them instead.

There is a short cooldown between swaps. This scroll costs mana.

Shared Vision

When used on a mob or player, the caster will see through its eyes.

It drains mana from the caster on use.

Spatial Disorientation

Using this scroll summons a staff which can be used on an entity to launch them in the direction the caster is looking. Longer charge time provides more velocity. Alternatively, when used on a block, nearby entities will be pulled in and launched, after a charge up time. It drains mana from the caster on use of the scroll, mana when used on an entity, and mana per second when used in AOE mode.

Strengthening

A Strengthening scroll will strengthen the first thing on your hotbar, or your off-hand if you\u2019re holding something. Strengthened items are temporarily unbreakable, do more damage, and have increased mining capabilities.

It drains mana from the caster on use.

Summon Familiar

When used, the player summons a familiar. This familiar will report on interesting players, mobs, and blocks that it sees, and will chunk load the area around it. You can right click a familiar with a block to make it only report that block if it finds one. Right clicking without a block will reset this.

It drains mana on use.

Tangible Boundary

The Tangible Boundary is a large invisible barrier with range that you can pass through, but mobs, arrows, and other entities cannot. It will not replace solid blocks other than grass, nor will it replace water.

It drains mana from the caster every second(s).

Treasury Projection

This scroll give the user a gauntlet which will project weapons and tools from the user\u2019s treasury - their inventory, some modded bags, and their ender chest, and fling them at the target block they are looking at.

It drains mana on using the scroll, and mana per weapon projected.

The gauntlet has two other modes upon pressing shift right-click. In AOE mode, weapons will be fired from behind you towards the direction you\u2019re looking at, and in Chains mode, chains will spawn near the target you\u2019re looking at and, if the target is a creature, attempt to hit them when right-click is held while staring at it.

Weapon Projectiles

Using this scroll grants the caster a bow, which can shoot tools and weapons.

It drains mana from the caster on use of the scroll.

Mahou | CurseForge

"},{"location":"atm6/mahou/caliburn/","title":"Caliburn","text":""},{"location":"atm6/mahou/caliburn/#caliburn","title":"Caliburn","text":""},{"location":"atm6/mahou/caliburn/#step-4","title":"Step 4","text":"

Allocate three large areas to your Mahou Tsukai adventure (I use a 19x19 area for the Mahou lake, a 10x10 area for the mob damage farm, and a 11x9 area for the villager kill farm)

"},{"location":"atm6/mahou/caliburn/#step-5-enchant-a-diamond-sword","title":"Step 5. Enchant a diamond sword","text":"

Note: The more Smite levels your sword has, the greater the base damage the Caliburn will have.

"},{"location":"atm6/mahou/caliburn/#step-6-creating-the-lake","title":"Step 6. Creating The Lake","text":"

After you have gathered enough Mahou Tsukai Mana (about 10,000, or a full Attuned Diamond) you are ready to place A Blood Circle in the center of your 19x19 area. Fill this Blood Circle with two Powdered Diamond, and One Powdered Emerald (FROM MAHOU!) Once the Lake is fully formed, there will be FOG!

Drop your enchanted diamond sword in and ensure you have at-least 5000 Mana. Search for the Caliburn in the lake to retrieve it!

"},{"location":"atm6/mahou/caliburn/#attuned-diamond-emerald","title":"Attuned Diamond / Emerald","text":"

Acts as Mana capacitors. Mana slowly decreases over time - Attuned Diamond / Emerald store unused Mana for later use (Mana in these do not decrease over time)

Continue To Morgan

Mahou Tsukai | CurseForge

"},{"location":"atm6/mahou/durabilityexchange/","title":"Durability Exchange","text":""},{"location":"atm6/mahou/durabilityexchange/#durability-exchange","title":"Durability Exchange","text":"

Obsidian Sheaders have over a million durability, but Mahou Tsukai caps durability exchange at like 2,500 durability but the recipe is cheap and easy so that\u2019s why I use it since each Durability Exchange spell circle can restore a maximum of 10 mana per second, you will need a large amount of spell circles and chests for you to be able to gain the mana you need to efficiently swing your Morgan at villagers for damage gain

Mahou | CurseForge

"},{"location":"atm6/mahou/mana/","title":"Mana","text":""},{"location":"atm6/mahou/mana/#mana","title":"Mana","text":"

Top left you should see a Mahou manu bar. If not run /showmahou

"},{"location":"atm6/mahou/mana/#step-8-create-an-enclosure-for-mahou-mana-generation","title":"Step 8. Create an enclosure for Mahou Mana generation","text":"
  • Ethereal Glass is solid for mobs, but players can pass through it.
  • Conveyor Belts push the mobs into the Mahou spell circles (that damage them for mana)
  • Wireless Redstone Reciever is used to toggle the mob spawner on from a distance. (spawner must have redstone comparator upgrade)
  • Absorption Hopper sucks up the mob drops and experience orbs. (it is recommended to hook up a tank for the absorption hopper to deposit liquid XP into)
  • Item Pipez move the drops from the absorption hopper into the trash cans. (My item pipe has an Ultimate Pipe Upgrade inside for quick item transfering)
  • Dark Connected glass prevents light from passing through and makes for a clear viewing window

The purpose of this farm is to drop mobs onto the Mahou damage spell circles, where they lose life (this gains you mana and increases your mana cap since the spell circles use 5 mana per 1 second) and then trash the drops (optional).

Image has 36 Boundary of Drain Life spell circles (6x6).

"},{"location":"atm6/mahou/mana/#step-9-create-an-enclosure-for-your-villager-spawner","title":"Step 9. Create an enclosure for your Villager spawner","text":"
  • My enclosure uses Solid Dark Zychorium Bricks and Dark Connected Glass, but any blocks may be used (as with the Mahou Mana Generation enclosure)
  • I have a Wireless Restone Reciever attached to the Villager spawner; the spawner is upgraded with a Redstone Comparator
  • Use GPS Data Cards on the Wireless Redstone Recievers to link the Wireless Transmitter so that the Lever starts up both the Mana Generation Farm and the Villager Spawner - this will increase your mana (and cap) at the same time as you kill villagers for the Morgan.

Mahou | CurseForge

"},{"location":"atm6/mahou/morgan/","title":"Morgan","text":""},{"location":"atm6/mahou/morgan/#morgan","title":"Morgan","text":""},{"location":"atm6/mahou/morgan/#rejecting-humanity","title":"Rejecting Humanity","text":""},{"location":"atm6/mahou/morgan/#step-7-kill-a-tamed-wolf-with-the-caliburn","title":"Step 7. Kill a Tamed Wolf with the Caliburn","text":""},{"location":"atm6/mahou/morgan/#congratulations-you-have-a-morgan","title":"Congratulations! You have a Morgan!","text":"

Increase your Morgan\u2019s Attack Damage by killing villagers (you must actively have or be generating Mana)

Continue To Mana

Mahou | CurseForge

"},{"location":"atm6/sky/","title":"All The Mods 6 - To The Sky","text":""},{"location":"atm6/sky/#atm6-to-the-sky","title":"ATM6 - To The Sky","text":"

All The Mods 6 - To The Sky | CurseForge | GitHub

"},{"location":"atm6/sky/dragons/","title":"Dragons","text":""},{"location":"atm6/sky/faq/","title":"F.A.Q","text":""},{"location":"atm6/sky/faq/#faq","title":"F.A.Q","text":"Question Answer How do I get started? If your new to modded, allthemods, or minecraft in general, please take a look at our getting started guide. \\ Is there a list of mods? Yes, on CurseForge Where can I find AllTheModium, Vibranium, & Unobtanium? Look in the in game book Allthemodium or search the ores in JEI and view the tooltips. There is additional information in the Allthemodium book. World Type level-type=skyblockbuilder\\:custom_skyblock Commands (More on Github) Create Island: /skyblock create, TP to Island: /skyblock home, TP to Spawn: /skyblock spawn."},{"location":"atm7/","title":"All The Mods 7","text":""},{"location":"atm7/#all-the-mods-7","title":"All The Mods 7","text":"

All The Mods 7 | CurseForge | GitHub

"},{"location":"atm7/lite/","title":"All The Mods 7 Lite","text":""},{"location":"atm7/lite/#all-the-mods-7-lite","title":"All The Mods 7 - Lite","text":"

All the Mods started out as a private pack for just a few friends of whatthedrunk\u2019s that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

With a selection of classic favourites and newly discovered mods, ATM7 Lite aims to have excellent performance on all machines whilst still being packed with content.

For those with an itch to build an amazing factory, we have Create and Immersive Engineering for setting up complex systems that look great, Customize your weapons and tools using either Silent Gear or Tinkers Construct, or settle for looting some epic gear from the Apotheosis bosses that will spawn in your world, Found a Civilization with Minecolonies, Or perhaps a remote tower to privately plot your progression through Ars Magica Legacy, BloodMagic, or Mahou Tsukai? The choices are many, and more importantly, yours!!

Recipe modification has been kept to a bare minimum, aiming to avoid recipe conflicts only.

Does \u201cAll the Mods 7 Lite\u201d really contain ALL THE MODS? No, of course not. This is a lite pack after all

All The Mods 7 - Lite | CurseForge | GitHub

"},{"location":"atm7/sky/","title":"All The Mods 7 - To The Sky","text":""},{"location":"atm7/sky/#all-the-mods-7-to-the-sky","title":"All The Mods 7 - To The Sky","text":"

All the Mods 7 To the Sky is the sequel to the popular atm6 sky, we have taken feedback from the first iteration to make this pack the best we have to offer, adding in mods that were not in the first such as Twilight Forest and Alchemistry, followed by the mod Ex Machinis, an automation addon for Ex Nihilo built in house by ATM to take you from early, all the way to end game automated resources.

All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 7 To the Sky we will continue the tradition adding many new mods whilst keeping to the quality of the first modpack

Does \u201cAll The Mods\u201d really contain ALL THE MODS? No, of course not.

All The Mods 7 - To The Sky | CurseForge | GitHub

"},{"location":"atm8/","title":"All The Mods 8","text":""},{"location":"atm8/#all-the-mods-8","title":"All The Mods 8","text":"

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 8 we will continue the tradition adding many new mods while going for more stability.

Does \u201cAll the Mods\u201d really contain ALL THE MODS? No, of course not.

All The Mods 8 | CurseForge | GitHub

"},{"location":"atm8/apotheosis/","title":"Apotheosis","text":""},{"location":"atm8/apotheosis/#apotheosis","title":"Apotheosis","text":""},{"location":"atm8/apotheosis/#starting-setup-jei-required","title":"Starting Setup (JEI REQUIRED)","text":""},{"location":"atm8/apotheosis/#requirements","title":"Requirements","text":"

Recipes for the shelves in this guide WILL NOT BE PROVIDED. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with.

"},{"location":"atm8/apotheosis/#seashelf-method","title":"Seashelf Method","text":"

To start, make 16 Seashelf and place down all but one in a formation like the one below.

Once you\u2019ve got those down, take your 16th Seashelf and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused Seashelf with your Infused Seashelf. Repeat this until all 16 Seashelf are Infused Seashelf. You will have 1 extra Infused Seashelf at the end.

You must be level 45+ to infuse Seashelves

After this, you\u2019ll need to break 9 Infused Seashelf and make 2 Heart-Forged Seashelf and 7 Crystalline Seashelf. Place these down where the original 9 were.

Now, you will need to make 10 Dormant Deepshelf and infuse them to their Deepshelf varient. You should be able to infuse them with your current setup.

You must be level 60+ to infuse Dormant Deepshelves

After infusing all 10, make 5 Soul-Touched Deepshelf and 5 Echoing Deepshelf. Then, upgrade them to their Sculkshelf variant. Press U or right click on the respective shelf in JEI to see what the recipe is to upgrade them.

Now you\u2019ll need to make 3 Shelf of End-Fused Rectification. This might require some work.

You will also need to make 1 Draconic Endshelf. To make the Infused Dragon\u2019s Breath, place down the 10 Sculkshelves made earlier and add 10 Melonshelf. A setup for this can be seen below; the placement of the shelves does not have to be exact.

You must be level 80+ to infuse Dragon\u2019s Breath

After making the Draconic Endshelf, remove all the Melonshelf. Place the 3 Shelf of End-Fused Rectification and the Draconic Endshelf in a similar formation as shown in the Seashelf image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example.

"},{"location":"atm8/apotheosis/#infusion-setups","title":"Infusion Setups","text":"

You do not have to place the blocks exactly as I do, these are just an example.

"},{"location":"atm8/apotheosis/#unbreakable-potion-charms","title":"Unbreakable Potion Charms","text":"

5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf

"},{"location":"atm8/apotheosis/#superior-sigil-of-socketing","title":"Superior Sigil of Socketing","text":"

5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf

"},{"location":"atm8/apotheosis/#tome-of-superior-scrapping","title":"Tome of Superior Scrapping","text":"

3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf

"},{"location":"atm8/apotheosis/#tome-of-extraction","title":"Tome of Extraction","text":"

3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf

"},{"location":"atm8/apotheosis/#library-of-alexandria","title":"Library of Alexandria","text":"

7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf

Apotheosis | CurseForge

"},{"location":"atm8/mekanism/","title":"Mekanism","text":""},{"location":"atm8/mekanism/#mekanism","title":"Mekanism","text":""},{"location":"atm8/mekanism/#ae2-mekanism-infuser-auto-crafting","title":"AE2 Mekanism Infuser Auto-Crafting","text":"

Using ME Pattern Providers, we can fully automate the Metallurgic Infuser (Left) and Enrichment Chamber (Right). This setup will only use 2 channels of your main network.

Materials
  • 1x Metalluric Infuser (higher the level, the better)
  • 1x Enrichment Chamber (higher, the better)
  • 1x Quartz Fiber
  • 8x AE2 Cables
  • 2x ME Pattern Provider (Block form)
  • 1x ME Interface (Panel form)
  • 2x ME Storage Bus
  • 8x Blank Patterns
Do you have Refined Obsidian automated already?

You can skip the Obsidian Dust filter on the left storage bus and the Refined Obsidian Dust Pattern and instead make a processing pattern to turn Refined Obsidian Ingots into Refined Obsidian Dust and put that in Pattern Provider connected to a Crusher.

"},{"location":"atm8/mekanism/#building-and-configuring","title":"Building and Configuring","text":"
  1. Put down your Metallurgic Infuser and place an ME Storage Bus on both sides of the infuser.
  2. Place an ME Pattern Provider right behind the infuser and put an ME Interface on top, then place a Quartz Fiber on the side.
  3. Place 7 AE2 cables (Yellow in the example) connecting all AE2 devices. The orange cable connects to your main AE2 network.
  1. Adjacent to the Infuser, place an Enrichment Chamber and a Pattern Provider behind it and place a cable connecting both pattern providers.

If you\u2019re using the same colored cables, place a Cable Anchor between them or use a different color.

Same Colored CablesDifferent Colored Cables

  1. Set the Infuser & Enrichment inputs/outputs like the images below.

The Infuser will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the Enrichment Chamber will input/output the back (Purple).

  1. For the ME Storage Buses item filters have Iron, Infused Alloy, Enriched Alloy, and Obsidian Dust on the left side and Enriched Redstone, Diamond, and Obsidian on the right.
"},{"location":"atm8/mekanism/#processing-patterns","title":"Processing Patterns","text":"

Now, we\u2019ll encode the Processing Patterns. These patterns are made so there will be a (essentially) 0% chance of clogging the Infuser due to leftover materials.

Make sure to set the patterns to Process (Furnace icon) instead of Crafting (Crafting Table icon).

Infuser PatternsEnrichment Chamber Patterns
  • 8 Iron + 1 Enriched Redstone = 8 Infused Alloy
  • 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy
  • 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy
  • 1 Obsidian = 4 Obsidian Dust
  • 1 Redstone = 1 Enriched Redstone
  • 1 Diamond = 1 Enriched Diamond
  • 1 Refined Obsidian Dust = 1 Enriched Obsidian
  • 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust

Then you\u2019ll put patterns in each pattern provider as shown below.

Make sure to give both machines power and to enabled Auto-Split.

Mekanism | CurseForge

"},{"location":"atm8/mysticalagriculture/","title":"Mystical Agriculture","text":""},{"location":"atm8/mysticalagriculture/#mystical-agriculture","title":"Mystical Agriculture","text":""},{"location":"atm8/mysticalagriculture/#farm-designs","title":"Farm Designs","text":""},{"location":"atm8/mysticalagriculture/#alfredggs-farm","title":"AlfredGG\u2019s Farm","text":"My Watering Can/Scythe isn\u2019t working

Mystical Agriculture doesn\u2019t allow fake players by default. The config can be changed in config/mysticalagriculture-common.toml -> fakePlayerWatering = true.

My Modular Routers aren\u2019t working

You will need to add a Security Upgrade since you are working in a claimed chunk (even though it\u2019s yours)

"},{"location":"atm8/mysticalagriculture/#kjms-full-auto-phytogenic-insolator-with-ae2","title":"KJM\u2019s Full-Auto Phytogenic Insolator with AE2","text":""},{"location":"atm8/mysticalagriculture/#requirements","title":"Requirements","text":"Minimum Building Materials
  • These materials set the ground work to build the full thing.
  • 3x ME Interface
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 2x AE2 Crafting Card
  • 2x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 8x of another different colored Dense cable (Examples are using Orange dense cables)
All Building Materials
  • 129x ME Interfaces
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 128x AE2 Crafting Card
  • 256x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 68x of another different colored Dense cable (Examples are using Orange dense cables)

Each image has a caption that shows when you click on it that you can read if you are stuck.

This farm requires a general understanding of AE2 and Thermal Series

"},{"location":"atm8/mysticalagriculture/#the-brain","title":"The \u201cBrain\u201d","text":"

First I\u2019ll show you how to build the \u201cbrain\u201d of those whole system. You can place it above everything (like in the image above) or underneath the floor.

  1. Place a Sink/Eternal Water Block and an ME Interface on the corners of a Quantum Ring and then place 2x Quartz Fibers/Cable Anchors between the Sink and ME Interface and on the center of the Quantum Ring.
  2. Then place your 2x colored cables (Lime cables) on top of them along with an ME Controller.
  3. The 1x colored cable (Magenta cable) should connect the quantum ring and the ME Interface.
  • Make sure to link your Quantum Rings.

  1. Place 2x ME Storage Bus on the ME Interface and Sink, facing each other.

  1. Have the ME Interface stock Water and Phyto-Gro and set the priority to -1.

  2. For the ME Storage Bus on the Sink settings, have the Input/Output Mode to Extract Only and put Water in the filter by dragging it from JEI.

"},{"location":"atm8/mysticalagriculture/#the-modules","title":"The Modules","text":"

Now we\u2019ll build one of the \u201cmodules\u201d that make up the entire thing. Each column of Phyto/Interface pairs is 8 blocks tall since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable.

  1. Each module consists of 2 Phytos next to each other and an ME Interface on each side.

1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90\u00b0 to one side depending on which corner it\u2019s on.

  1. For the ME Interface, put a Crafting Card in and set Water and Phyto-Gro in the filter by dragging it from JEI.

  2. For the Phytos it\u2019ll be slightly different depending on which side the ME Interface is on. You will have it Auto Input/Output the side touching the interface. The image below is for a phyto with an interface to the left.

  3. Each Phyto will have 1x Draconic Integral Component & 3x Twinite Flux Linkages. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these.

Why not use Shellite instead of Twinite? KJM explains

The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component.

You\u2019ll stack these modules to a maximum of 8 tall and arrange them into 4 walls.

Tips
  • Use an AE2 Memory Card to copy ME Interface settings (Shift + R-Click to Copy, R-Click to Paste)
  • Use Redprint to copy Phytogenic Insolator settings (R-Click to Copy and to Paste)
"},{"location":"atm8/mysticalagriculture/#connecting-and-powering","title":"Connecting and Powering","text":"

You\u2019ll put your Colored Dense Cables in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos.

Mystical Agriculture | CurseForge

"},{"location":"atm9/","title":"All The Mods 9","text":""},{"location":"atm9/#all-the-mods-9","title":"All The Mods 9","text":"

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

In All the Mods 9 we will continue the tradition adding many new mods while going for more stability.

Does \u201cAll the Mods\u201d really contain ALL THE MODS? No, of course not.

We use a few versions of Complementary Shaders and if there are any issues with them that all falls on us for using them in our pack. If you want to learn more about them please check them out on their website.

All The Mods 9 | CurseForge | GitHub

"},{"location":"atm9/allthemodium/","title":"AllTheModium","text":""},{"location":"atm9/allthemodium/#allthemodium","title":"AllTheModium","text":"

In ATM9, All The Modium has changed in ways different from previous packs. We\u2019ll explain where to find, how to obtain, and how Templates works to craft armor & tools!

"},{"location":"atm9/allthemodium/#where-how","title":"Where & How","text":"

AllTheModium ores can be found across 3 dimensions: Overworld, Nether, and The End, normally exposed to AIR.

  • AllTheModium: (Overworld)
    • Found in Deep Dark Biome, also in Mining Dimension Deep Slate layer (Y 65-129).
      • Mining Dimension is more rare, at-least 1 ore per chunk.
      • Killing Warden also grants a Quest reward ATM Ingot.
    • Obtained with a Netherite level pick or better.
  • Vibranium: (Nether)
    • Found in Nether dimension (no longer biome specific).
      • Elevation between Y 64-127
    • Also Found between Y 0-40 within The Other dimension.
    • Obtained with an AllTheModium level pick or better.
  • Unobtainium: (End)
    • Found within End Highlands.
      • More rare than other ores
    • Obtained with Vibranium level pick or better

Ores Can Only Be Mined By A \u2018Real Player\u2019

"},{"location":"atm9/allthemodium/#templates","title":"Templates","text":"
  • AllTheModium:
    • Found in Sus Clay in Ancient Cities within the Overworld.
  • Vibranium:
    • Found in Sus SoulSand in Bastions within the Nether.
  • Unobtainium:
    • Found in The Other dimension, as chest loot in the underground library of allthemodium:dungeon structure.
"},{"location":"atm9/allthemodium/#smithing-recipe-example","title":"Smithing Recipe Example","text":"Template Armor Ingot Output"},{"location":"atm9/apotheosis/","title":"Apotheosis","text":""},{"location":"atm9/apotheosis/#apotheosis","title":"Apotheosis","text":""},{"location":"atm9/apotheosis/#kaimonicks-apotheosis-overview","title":"Kaimonick\u2019s Apotheosis Overview","text":"

Click here to view Kai\u2019s guide!

"},{"location":"atm9/apotheosis/#starting-enchanting-setup","title":"Starting Enchanting Setup","text":""},{"location":"atm9/apotheosis/#requirements","title":"Requirements","text":"

Recipes for the shelves in this guide WILL NOT BE PROVIDED. Please use JEI. Other requirements include a brain and some sort of sensory organ to perceive this with.

"},{"location":"atm9/apotheosis/#seashelf-method","title":"Seashelf Method","text":"

To start, make 16 Seashelf and place down all but one in a formation like the one below.

Once you\u2019ve got those down, take your 16th Seashelf and place it in the enchanting table. You should see an Infusion option for 3 EXP. Now replace one of the uninfused Seashelf with your Infused Seashelf. Repeat this until all 16 Seashelf are Infused Seashelf. You will have 1 extra Infused Seashelf at the end.

You must be level 45+ to infuse Seashelves

After this, you\u2019ll need to break 9 Infused Seashelf and make 2 Heart-Forged Seashelf and 7 Crystalline Seashelf. Place these down where the original 9 were.

Now, you will need to make 10 Dormant Deepshelf and infuse them to their Deepshelf varient. You should be able to infuse them with your current setup.

You must be level 60+ to infuse Dormant Deepshelves

After infusing all 10, make 5 Soul-Touched Deepshelf and 5 Echoing Deepshelf. Then, upgrade them to their Sculkshelf variant. Press U or right click on the respective shelf in JEI to see what the recipe is to upgrade them.

Now you\u2019ll need to make 3 Shelf of End-Fused Rectification. This might require some work.

You will also need to make 1 Draconic Endshelf. To make the Infused Dragon\u2019s Breath, place down the 10 Sculkshelves made earlier and add 10 Melonshelf. A setup for this can be seen below; the placement of the shelves does not have to be exact.

You must be level 80+ to infuse Dragon\u2019s Breath

After making the Draconic Endshelf, remove all the Melonshelf. Place the 3 Shelf of End-Fused Rectification and the Draconic Endshelf in a similar formation as shown in the Seashelf image above. This will get you the maximum level of enchanting. Your setup does not have to be in the exact same order as the one below; it is only an example.

"},{"location":"atm9/apotheosis/#infusion-setups","title":"Infusion Setups","text":"

You do not have to place the blocks exactly as I do, these are just an example.

"},{"location":"atm9/apotheosis/#unbreakable-potion-charms","title":"Unbreakable Potion Charms","text":"

5x Draconic Endshelf, 2x Echoing Deepshelf, 1x Melonshelf, 1x Endshelf

"},{"location":"atm9/apotheosis/#superior-sigil-of-socketing","title":"Superior Sigil of Socketing","text":"

5x Echoing Deepshelf, 2x Draconic Endshelf, 2x Soul-Touched Deepshelf

"},{"location":"atm9/apotheosis/#tome-of-superior-scrapping","title":"Tome of Superior Scrapping","text":"

3x Echoing Deepshelf, 1x Soul-Touched Deepshelf, 1x Endshelf, 1x Draconic Endshelf

"},{"location":"atm9/apotheosis/#tome-of-extraction","title":"Tome of Extraction","text":"

3x Echoing Deepshelf, 2x Draconic Endshelf, 1x Soul-Touched Deepshelf

"},{"location":"atm9/apotheosis/#library-of-alexandria","title":"Library of Alexandria","text":"

7x Echoing Deepshelf, 3x Draconic Endshelf, 2x Soul-Touched Deepshelf

"},{"location":"atm9/apotheosis/#infused-teleportation-core-setups","title":"Infused Teleportation Core Setups","text":"

Below are the setups to make each infused teleportation core that are needed for the ATM Star. Each setup has 2 variants, one that only uses shelves from the max enchanting setup and one that use other shelves to get the same result. Use whichever is easiest for you.

"},{"location":"atm9/apotheosis/#nether","title":"Nether","text":"Max Enchanting ShelvesAlternative Shelves

10x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf

8x Glowing Hellshelf, 8x Hellshelf, 3x Melonshelf, 2x Echoing Deepshelf, 1x Draconic Endshelf

"},{"location":"atm9/apotheosis/#ender","title":"Ender","text":"Max Enchanting ShelvesAlternative Shelves

4x Draconic Endshelf, 3x Melonshelf, 2x Echoing sculkshelf, 1x Soul-Touched Sculkshelf

4x Draconic Endshelf, 2x Echoing Deepshelf, 2x Glowing Hellshelf, 2x Infused Seashelf, 1x Stoneshelf, 1x Melonshelf

"},{"location":"atm9/apotheosis/#draconic","title":"Draconic","text":"Max Enchanting ShelvesAlternative Shelves

7x Melonshelf, 5x Soul-Touched Sculkshelf, 5x Echoing Sculkshelf, 1x Draconic Endshelf

8x Deepshelf, 4x Echoing Deepshelf, 2x Draconic Endshelf, 1x Melonshelf, 1x Oak Bookshelf

"},{"location":"atm9/apotheosis/#spawner-changes","title":"Spawner Changes","text":"
  • Remove AI: Chorus Fruit Golden Apple
  • Ignore Players: Nether Star Conduit
  • Increase Entities: Ghast Tears | Max 32 16
  • Increase Spawn Count: Fermented Spider\u2019s Eye Piglich Heart | Max 16 8
  • Decrease Minimum Spawn Delay: Sugar AllTheModium Ingot | Min 20 100
  • Decrease Maximum Spawn Delay: Clock Unobtainium Ingot | Min 20 100

The aim of these changes are to make removing AI easier, give Conduits more of a use, encourage people to look out for good spawners in the world, and bring spawners more in line with the other options available for farming mob drops, like Hostile Neural Networks or Mystical Agriculture or Productive Bees WannaBee mob farms.

Apotheosis | CurseForge

"},{"location":"atm9/extremereactors/","title":"Extreme Reactors","text":""},{"location":"atm9/extremereactors/#extreme-reactors","title":"Extreme Reactors","text":"

Extreme Reactors is a custom sized multi-block reactor for power generation, similar to Bigger Reactor & Big Reactor.

"},{"location":"atm9/extremereactors/#setups-and-sizes","title":"Setups and Sizes","text":"Object Max Height (Y) Max Size (X/Z) Basic Reactor 5 5 Hardened Reactor 48 32 Turbine 32 32 Fluidizer 16 16

FunshineX has made a very detailed video going over all the different sizes of reactors, efficiencies, placement of moderators, and turbine setups. Your RF/t numbers will be higher than his numbers in the video due to the Power Gen Changes mentioned above.

Some additional information regarding other aspects on how the turbines work and other tips specific to ATM.

Disastrous_Site_6352 via Reddit

  • Wider is more efficient than taller for fuel.
  • The most efficient setup for rods is a checkerboard pattern with three spaces between the outermost rod and the interior wall. Heat manifolds placed on the interior walls of the reactor also in a checkerboard pattern in the cardinal directions of any rods (North, South, East, West).
  • Passive cooled reactors generate rf, active cooled with water produces steam for turbines. You will need to run passive for a while to produce cyanite for blutonium to make turbines.
  • One actively cooled reactor can produce enough steam for several turbines.
  • Liquid sodium from Mekanism can be used to actively cool the reactor, making superheated liquid sodium then pumping it into a heat exchanger to produce even more steam powers even more turbines.
  • Heat exchanger setup isn\u2019t really necessary in atm because of other more efficient setups for power. It\u2019s much like creating 5x ore processing in a modpack with mystical agriculture, fun but overkill.
"},{"location":"atm9/extremereactors/#moderators","title":"Moderators","text":"Moderator FE/t % of top \u03bcB/t Air 13,406 91.23% 198 Dry Ice 13,525 92.06% 198 Iron 13,862 94.34% 190 Manasteel 13,912 94.68% 191 Lead 14,277 97.16% 187 Graphite 14,342 97.60% 182 Tangerium 14,422 98.15% 184 Electrum 14,466 98.45% 187 Emerald 14,475 98.51% 184 Cryomisi 14,502 98.69% 186 Elementium 14,527 98.86% 185 Diamond 14,573 99.18% 184 Terrasteel 14,625 99.53% 185 Netherite 14,629 99.56% 183 Redfrigium 14,694 100.00% 181"},{"location":"atm9/extremereactors/#computer-craft-integration","title":"Computer Craft Integration","text":"

You can use Computer Craft with scripts such as Kasra-G\u2019s Automated Reactor Controller to easily automate your reactor with the Reactor Computer Port. There are other Computer Craft scripts that will integrate with Extreme Reactor Turbines as well.

You must enable HTTP API for Computer Craft Integration

To pull the script above as outlined in the repo\u2019s instructions, you must edit the following file: /YOURWORLDNAME/defaultconfigs/computercraft-server.toml

Search for http and make sure it is set to enabled = true as shown below.

computercraft-server.toml
    [http]\n        #Enable the \"http\" API on Computers. Disabling this also disables the \"pastebin\" and\n        #\"wget\" programs, that many users rely on. It's recommended to leave this on and use\n        #the \"rules\" config option to impose more fine-grained control.\n        enabled = true\n

Your server must be off when changing this file. If you edit it while it is running, the changes will not apply.

"},{"location":"atm9/extremereactors/#power-gen-changes","title":"Power Gen Changes","text":"

Overall Power Gen: 1x 3x | 53 can produce ~15k RF/t

Extreme Reactors | CurseForge

"},{"location":"atm9/faq/","title":"ATM9 FAQ","text":""},{"location":"atm9/faq/#faq","title":"FAQ","text":"

All The Mods 9 Frequently Asked Questions

Gameplay FAQs Why can\u2019t I use modular router and watering can?

By default, Mystical Agriculture does not allow fake players to automate watering cans. If you dislike this change, it can be changed within config/mysticalagriculture-common.toml > fakePlayerWatering = true.

Do I need to chunkload all the chunks my Chunk Destroyer is going to mine?

You do not need to load chunks you\u2019re mining. You only need to chunkload the chunk the Chunk Destroyer is in.

How do I remove enchants from a book/weapon?
  • Drop an anvil onto Obsidian with the enchanted book/weapon along with Books for each separate enchantment (EX: You have a book with 3 different enchants, you\u2019d need 3 books to split those enchants).
  • Enchant the anvil with Splitting (Only splits books/weapons with 1 enchant) or Obliteration (Splits any number of enchants)
  • Use the Enchantment Extractor from Industrial Foregoing. Provide it with Books and Power, and it will extract each enchantment on all enchanted items/books to singular books. It can also be configured to push extracted enchantments into the Enchantment Library from Apotheosis.
What\u2019s the little 3D cube next to my crosshair?

It\u2019s from Quark, the default keybind to toggle it is K.

How do I find \u2018insert name\u2019 biome?

Nature\u2019s Compass is a really nice tool to find any and all biomes in the modpack. Craft it, right click with it in your hand, and you can run the search for any biome you are looking for (such as the Deep Dark).

How do I change /home, /tpa etc cooldown?

To change the behavior of /home or to re-enable /back and /rtp, edit saves/worldName/serverconfig/ftb-essentials.snbt. The world/server has to be stopped for the changes to take effect.

Why is flight disabled?

Flight is disabled in certain dimensions (The Other, Blue Skies, and Twilight Forest), to add more difficulty towards progression. If you dislike this change, it can be disabled in worldName/serverconfig/noflyzone.snbt

Technical FAQs I can\u2019t complete \u2018name of quest\u2019 even though I fufilled the requirements?

You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it\u2019s progress if you still have the items.

I have my chunks force loaded, but they don\u2019t run when I\u2019m logged off.
  1. Press M to open the map.
  2. Press Ctrl+S to open the server settings (requires OP).
  3. Change Forceloading Mode to always.
What\u2019s the difference between ATM9 and ATM9: No Frills?

Here is a comparison

Why isn\u2019t \u2018insert name\u2019 mod in ATM9 yet?

ATM packs does not literally contain \u201cAll The Mods\u201d. Our main focus is having mods that\u2019s not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version 1.20.1, and Forge (Not NeoForge), you may make a suggestion.

I found a bug/dupe in the pack. How can I report it?

To report bugs, dupes or similar, head over to the ATM9 GitHub and open a new issue describing the occurrence.

What are the recommended Java arguments for this pack?
  • Client arguments: send ?args in the #bot-spam channel in our Discord.
  • Server arguments: send ?svargs in the #bot=spam channel in our Discord.
Why does my game crash while launching?

Lack of RAM most likely. Send ?allocate in the #bot-spam channel in our Discord to learn how to allocate more RAM. If that\u2019s not the problem, head to #atm9-techsupport and send ?logs to see how to upload your crash/latest log.

I crashed and got Error code 1, please help

Exit code 1 is a generic error from Minecraft. It is no different than \u201cgame didn\u2019t load, no longer attempting to load. Please refer to the output error log created by your launcher\u201d if you are unsure\u2026 please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our Discord. Try running ?logs instead.

I\u2019m having issues connecting to a LAN/Essentials world

To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these.

"},{"location":"atm9/generatorgalore/","title":"Generator Galore","text":""},{"location":"atm9/generatorgalore/#generator-galore","title":"Generator Galore","text":""},{"location":"atm9/generatorgalore/#power-gen-changes","title":"Power Gen Changes","text":"Basic Generators Generator Change Copper 8 20 RF/t Iron 16 40 RF/t Gold 32 80 RF/t Diamond 64 160 RF/t Obsidian 128 200 RF/t Emerald 256 300 RF/t Netherite 256 500 RF/t Special Generators Generator Change Notes Enchantment 40 500 RF/t Magmatic 40 150 RF/t Ender 40/80 300/500 RF/t Ender Pearl or Eye of Ender -> 300 500 RF/t. Culinary 8 10 RF/t ATM Carrot currently generates 320 RF/t. This would make it 400 RF/t per carrot, which is fair. Halitosis 40 1k RF/t Only way to automate Dragon\u2019s Breath is HNN. Nerf overall RF given from 480k 200k . NetherStar 4k 10k RF/t Tons of Nether Stars are needed for the star, so choosing this gen should be worth it.

Generator Galore | CurseForge

"},{"location":"atm9/gregtech/","title":"GregTech","text":""},{"location":"atm9/gregtech/#gregtechceu-modern","title":"GregTechCEu Modern","text":"

GregTechCEu Modern | CurseForge

"},{"location":"atm9/mahoutsukai/","title":"Mahou Tsukai","text":""},{"location":"atm9/mahoutsukai/#mahou-tsukai","title":"Mahou Tsukai","text":"

Mahou Tsukai is a magic mod focused mainly on spell uniqueness and special effects, instead of focusing on how spells are created, as many magic mods do. Many of the spells are based on similar concepts in Fate/Stay Night and other media, but knowledge of these media are not at all necessary to understand and enjoy the mod.

"},{"location":"atm9/mahoutsukai/#atm9-mahou-changes","title":"ATM9 Mahou Changes","text":"
  • Innate Cap is set to a maximum of 5000.
  • Increasing Innate Cap requires throwing Ender Upgrade Orbs (26 max) in Mahou lake along with Caliburn in a single throw.
  • Converting Caliburn to Morgan requires killing the Warden with Caliburn.

You must throw Caliburn into the lake with all Ender Upgrade Orbs you plan to use at the same time in a single throw. You only have one chance to increase the Innate Cap. If for example you only throw 10 Ender Upgrade Orbs and Caliburn into the lake, then later throw 16 (for a total of 26) in the lake with Caliburn it will not accept the remaining 16 Ender Upgrade Orbs. If this happens you need to make a new Caliburn.

Mahou Tsukai | CurseForge

"},{"location":"atm9/mekanism/","title":"Mekanism","text":""},{"location":"atm9/mekanism/#mekanism","title":"Mekanism","text":""},{"location":"atm9/mekanism/#power-gen-changes","title":"Power Gen Changes","text":""},{"location":"atm9/mekanism/#buffed","title":"Buffed","text":"Generator Change Notes Bio Generator 280 500 RF/t Makes it more of an option instead of straight out using GBG."},{"location":"atm9/mekanism/#nerfed","title":"Nerfed","text":"Generator Change Notes GBG Ethylene 78K ~8.5k RF/t Super nerfed but promotes good setups.

Higher burn rate = more melons needed for setup.

Recipe has been made harder for the GBG.

"},{"location":"atm9/mekanism/#ae2-mekanism-infuser-auto-crafting","title":"AE2 Mekanism Infuser Auto-Crafting","text":"

Using ME Pattern Providers, we can fully automate the Metallurgic Infuser and Enrichment Chamber. This setup will only use 2 channels of your main network.

Materials
  • 1x Metalluric Infuser (higher the level, the better)
  • 1x Enrichment Chamber (higher, the better)
  • 1x Quartz Fiber
  • 8x AE2 Cables
  • 2x ME Pattern Provider (Block form)
  • 1x ME Interface (Panel form)
  • 2x ME Storage Bus
  • 8x Blank Patterns
Do you have Refined Obsidian automated already?

You can skip the Obsidian Dust filter on the left storage bus and the Refined Obsidian Dust Pattern and instead make a processing pattern to turn Refined Obsidian Ingots into Refined Obsidian Dust and put that in a Pattern Provider connected to a Crusher.

"},{"location":"atm9/mekanism/#building-and-configuring","title":"Building and Configuring","text":"
  1. Put down your Metallurgic Infuser and place an ME Storage Bus on both sides of the infuser.
  2. Place an ME Pattern Provider right behind the infuser and put an ME Interface on top, then place a Quartz Fiber on the side.
  3. Place 7 AE2 cables (Yellow in the example) connecting all AE2 devices. The orange cable connects to your main AE2 network.
  1. Adjacent to the Infuser, place an Enrichment Chamber and a Pattern Provider behind it and place a cable connecting both pattern providers.

If you\u2019re using the same colored cables, place a Cable Anchor between them or use a different color.

Same Colored CablesDifferent Colored Cables

  1. Set the Infuser & Enrichment inputs/outputs like the images below.

The Infuser will input items on the left (Red Slot) and Extra Items on the right (Yellow Slot) while the Enrichment Chamber will input/output the back (Purple).

  1. For the ME Storage Buses item filters have Iron, Infused Alloy, Enriched Alloy, and Obsidian Dust on the left side and Enriched Redstone, Diamond, and Obsidian on the right.
"},{"location":"atm9/mekanism/#processing-patterns","title":"Processing Patterns","text":"

Now, we\u2019ll encode the Processing Patterns. These patterns are made so there will be a (essentially) 0% chance of clogging the Infuser due to leftover materials.

Make sure to set the patterns to Process (Furnace icon) instead of Crafting (Crafting Table icon).

Infuser PatternsEnrichment Chamber Patterns
  • 8 Iron + 1 Enriched Redstone = 8 Infused Alloy
  • 4 Infused Alloy + 1 Enriched Diamond = 4 Enriched Alloy
  • 2 Enriched Alloy + 1 Enriched Obsidian = 2 Atomic Alloy
  • 1 Obsidian = 4 Obsidian Dust
  • 1 Redstone = 1 Enriched Redstone
  • 1 Diamond = 1 Enriched Diamond
  • 1 Refined Obsidian Dust = 1 Enriched Obsidian
  • 8 Obsidian Dust + 1 Enriched Diamond = 8 Refined Obsidian Dust

Then you\u2019ll put patterns in each pattern provider as shown below.

Make sure to give both machines power and to enabled Auto-Split.

"},{"location":"atm9/mekanism/#fission-reactor-temp-calculation","title":"Fission Reactor Temp Calculation","text":"

Big shoutout to Kayla for these equations! Go check out her CC Mek SCADA on GitHub!

Use the equation below to estimate how hot your reactor will get at a specific burn rate for either water or sodium coolant. Remember the reactor starts taking damage at >1200K!

Water: burn_rate(1) * 2 * [1,000,000 * (heat_capacity-1)] + 373.15

  1. in mB

Sodium: burn_rate(1) * [1,000,000 * (heat_capacity-1)] + 373.15

  1. in mB
How do I calculate heat_capacity?

heat_capacity is joules per kelvin based on the physical size of the reactor, by default thats 1000x the amount of \u2018casing\u2019 which includes reactor glass, casing, valves, etc.

- Kayla

heat_capacity = (2 * W2) + [(H-2) * (W2 -(W-2)2)] * 1000

W and H are the Width and Height of Fission Reactor respectively

Full Explanation of Kayla\u2019s Calculations

Mekanism | CurseForge

"},{"location":"atm9/mobgrindingutils/","title":"Mob Grinding Utils","text":""},{"location":"atm9/mobgrindingutils/#mob-grinding-utils","title":"Mob Grinding Utils","text":""},{"location":"atm9/mobgrindingutils/#recipe-changes","title":"Recipe Changes","text":"

The Looting upgrade for the Mob Masher has been changed. Originally, it required redstone dust, 4 blue dye, and 4 gold nuggets.

It is mostly the same, but instead of redstone dust it now uses an actual Enchanted Book with Looting (any level).

Mob Grinding Utils | CurseForge

"},{"location":"atm9/mysticalagriculture/","title":"Mystical Agriculture","text":""},{"location":"atm9/mysticalagriculture/#mystical-agriculture","title":"Mystical Agriculture","text":""},{"location":"atm9/mysticalagriculture/#infusion-changes","title":"Infusion Changes","text":"

ATM9 adds Mystical Agriculture Tiered Crystals which, as the name suggests, adds tiered crystals. You must use a crystal of the same tier to upgrade to the next one (EX: You have to use an Imperium Crystal to craft Supremium Essence).

  • Master Infusion Crystals now requires 4 SupremiumInsanium.
"},{"location":"atm9/mysticalagriculture/#farm-designs","title":"Farm Designs","text":""},{"location":"atm9/mysticalagriculture/#alfredggs-farm","title":"AlfredGG\u2019s Farm","text":"My Watering Can/Scythe isn\u2019t working

Mystical Agriculture doesn\u2019t allow fake players by default. The config can be changed in config/mysticalagriculture-common.toml -> fakePlayerWatering = true.

My Modular Routers aren\u2019t working

You will need to add a Security Upgrade since you are working in a claimed chunk (even though it\u2019s yours)

"},{"location":"atm9/mysticalagriculture/#kjms-full-auto-phytogenic-insolator-with-ae2","title":"KJM\u2019s Full-Auto Phytogenic Insolator with AE2","text":""},{"location":"atm9/mysticalagriculture/#requirements","title":"Requirements","text":"Minimum Building Materials
  • These materials set the ground work to build the full thing.
  • 3x ME Interface
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 2x AE2 Crafting Card
  • 2x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 8x of another different colored Dense cable (Examples are using Orange dense cables)
All Building Materials
  • 129x ME Interfaces
  • 2x ME Storage Bus
  • 2x Quartz Fiber or Cable Anchor
  • 128x AE2 Crafting Card
  • 256x Phytogenic Insolator
  • 1x ME Controller
  • 1x Pair of Quantum Rings
  • 1x Sink/Eternal Water Block
  • 1x of any colored cable (Examples are using Magenta cables)
  • 2x of a different colored cable (Examples are using Lime cables)
  • 68x of another different colored Dense cable (Examples are using Orange dense cables)

Each image has a caption that shows when you click on it that you can read if you are stuck.

This farm requires a general understanding of AE2 and Thermal Series

Click here to view Kai\u2019s AE2 guide!

"},{"location":"atm9/mysticalagriculture/#the-brain","title":"The \u201cBrain\u201d","text":"

First I\u2019ll show you how to build the \u201cbrain\u201d of those whole system. You can place it above everything (like in the image above) or underneath the floor.

  1. Place a Sink/Eternal Water Block and an ME Interface on the corners of a Quantum Ring and then place 2x Quartz Fibers/Cable Anchors between the Sink and ME Interface and on the center of the Quantum Ring.
  2. Then place your 2x colored cables (Lime cables) on top of them along with an ME Controller.
  3. The 1x colored cable (Magenta cable) should connect the quantum ring and the ME Interface.
  • Make sure to link your Quantum Rings.

  1. Place 2x ME Storage Bus on the ME Interface and Sink, facing each other.

  1. Have the ME Interface stock Water and Phyto-Gro and set the priority to -1.

  2. For the ME Storage Bus on the Sink settings, have the Input/Output Mode to Extract Only and put Water in the filter by dragging it from JEI.

"},{"location":"atm9/mysticalagriculture/#the-modules","title":"The Modules","text":"

Now we\u2019ll build one of the \u201cmodules\u201d that make up the entire thing. Each column of Phyto/Interface pairs is 8 blocks tall since an AE2 subnet without a controller only has 8 channels. Each wall will use all 32 channels of a dense cable.

  1. Each module consists of 2 Phytos next to each other and an ME Interface on each side.

1.5 If you build the full size farm, the corners will look like this. One of the Phytos will move 90\u00b0 to one side depending on which corner it\u2019s on.

  1. For the ME Interface, put a Crafting Card in and set Water and Phyto-Gro in the filter by dragging it from JEI.

  2. For the Phytos it\u2019ll be slightly different depending on which side the ME Interface is on. You will have it Auto Input/Output the side touching the interface. The image below is for a phyto with an interface to the left.

  3. Each Phyto will have 1x Draconic Integral Component & 3x Twinite Flux Linkages. This combination provides maximum efficiency, of course you can put the lower tier ones in as you are working up to these.

Why not use Shellite instead of Twinite? KJM explains

The stats for Shellite Flux Linkage is 120% & 1.1x. The stats for the Twinite Flux Linkage is 110% & 1.01x. An MA seed uses 20,000FE to complete one growth operation, and Phytos fill at 20FE/t by default. That 20,000 number is multiplied by the process energy statistic. A single Shellite upgrade would modify it to 22,000FE, and Twinite goes to 20,200FE. The second stat modified is energy usage. Shellite increases the per-tick power consumption to 44FE/t, and Twinite increases it to 42FE/t. A recipe runs for 50 seconds by default since 20,000 divided by 20 divided by 20 (the number of ticks per second) is 50. Placing the numbers in for shellite 22,000/44/20 = 25 and for Twinite 20,200/42/20 = 24. Therefore, Twinite at a base level with a single upgrade is 1 second faster than Shellite. This number is further modified by adding multiple linkages and the integral component.

You\u2019ll stack these modules to a maximum of 8 tall and arrange them into 4 walls.

Tips
  • Use an AE2 Memory Card to copy ME Interface settings (Shift + R-Click to Copy, R-Click to Paste)
  • Use Redprint to copy Phytogenic Insolator settings (R-Click to Copy and to Paste)
"},{"location":"atm9/mysticalagriculture/#connecting-and-powering","title":"Connecting and Powering","text":"

You\u2019ll put your Colored Dense Cables in this arrangement, each dense cable branch connects 4 colums of interfaces. You can use whatever energy pipe you want to power the phytos.

Mystical Agriculture | CurseForge

"},{"location":"atm9/powah/","title":"Powah","text":""},{"location":"atm9/powah/#powah","title":"Powah!","text":"

Powah is a tech mod that adds various ways to generate, store, and transmit FE (Forge Energy).

"},{"location":"atm9/powah/#power-gen-changes","title":"Power Gen Changes","text":"
  • Soul Lava can now be used in the Thermo. This doesn\u2019t increase RF/t, but generates 9x more RF per mb.
  • Early game generators have been given a buff to make it feel better to start in Powah vs other mods. The changes are as followed:
"},{"location":"atm9/powah/#furnator","title":"Furnator","text":"
  • Starter: 20 80 RF/t
  • Basic: 80 160 RF/t
  • Hardened: 200 400 RF/t
  • Blazing: 800 1000 RF/t
"},{"location":"atm9/powah/#magmator","title":"Magmator","text":"
  • Starter: 20 80 RF/t
  • Basic: 80 160 RF/t
  • Hardened: 200 400 RF/t
  • Blazing: 800 1000 RF/t
"},{"location":"atm9/powah/#thermo-generator","title":"Thermo Generator","text":"
  • Starter: 20 40 RF/t
  • Basic: 60 80 RF/t
  • Hardened: 125 150 RF/t
  • Blazing: 250 300 RF/t
  • Niotic: 500 600 RF/t
  • Spirited: 1250 1500 RF/t
  • Nitro: 2750 3500 RF/t
Note

While these are small buffs, using Soul Lava gets a massive buff here. Nitro tier goes from ~25k RF/t to ~31.5k RF/t.

"},{"location":"atm9/powah/#solar-generators","title":"Solar Generators","text":"
  • Starter: 20 40 RF/t
  • Basic: 60 120 RF/t
  • Hardened: 180 400 RF/t
  • Blazing: 540 1500 RF/t
  • Niotic: 1620 5000 RF/t
  • Spirited: 5000 16000 RF/t
  • Nitro: 20000 50000 RF/t
Note

While it may seem like a massive buff, Solar Panels are more expensive than almost every other generator, including Reactors. Each tier requires 3 of the previous tier, so this should make them more of an enticing option for late game players.

Powah! | CurseForge

"},{"location":"atm9/productivebees/","title":"Productive Bees","text":""},{"location":"atm9/productivebees/#productive-bees","title":"Productive Bees","text":""},{"location":"atm9/productivebees/#kaimonicks-bee-guides","title":"Kaimonick\u2019s Bee Guides","text":"

Click here to view Kai\u2019s bee guide!

"},{"location":"atm9/productivebees/#jonh09s-bee-guide","title":"Jonh09\u2019s Bee Guide","text":"

Hi, I\u2019m Jonh09 and this guide is to help people who are getting into Productive Bees or want to know more advanced stuff.

If you\u2019re starting out and want to learn more, check out Kai\u2019s Guides for complete set of guides. Pilpoh also has an advanced guide! Also, read the Productive Bees book; it has all you need to know, including upgrades and how they work, different types of bees, different machines, etc. A glance at the book will help if you get stuck. Also, remember that JEI is your best friend.

This guide\u2019s main focus is genes. Genes are the stats that bees have that determine their productivity, what conditions they can work in, and other less important ones. I will show you the best genes and how to get them here.

If you find any errors or something that can be done differently, you can ping me @jonh09.

Original guide: Productive Bees GUIDE - Beginning Tutorials + Best Genes and how to get them

"},{"location":"atm9/productivebees/#gene-types","title":"Gene Types","text":"

Apart from the 5 main genes, there is a 6th gene, the bee-specific gene. These are used to make spawn eggs of that bee. Most major mods use bee spawn eggs to connect themselves to Productive Bees. (EX: Mystical Agriculture essence bees)

Gene Description Levels Best Level Productivity Produces more combs per trip Normal, Medium, High, Very High Very High Weather Tolerance Determines which weather conditions a bee can work in None, Rain, Any Any Behavior What time of day the bee can work Diurnal, Nocturnal, Metaturnal Metaturnal Endurance Affects the bee\u2019s max health Weak, Normal, Medium, Strong Strong Temper Affects bee\u2019s hostility Passive, Normal, Aggressive, Hostile Passive"},{"location":"atm9/productivebees/#how-to-get-genes","title":"How to Get Genes","text":"

Now that you know what the genes are, you need to know how to get the genes. When you squash a bee to get genes, you will get all of its 6 different genes. The bad news? You only get a small percentage of the gene. The percentage dictates the chance that another bee has to get that gene. To give genes to a different bee, combine a Honey Treat with your chosen gene(s) in a crafting grid and then Right Button on a bee to give them that trait.

Getting genes is a pretty simple process:
  1. Get a bee you wish to get the genes of
  2. In a 3 block tall space, put a Bottler (with bottles of course) on the bottom, and a Piston facing down on top with button/lever next to it.
  3. Put the bee in the middle, and quickly press the lever/button, that will squish the bee into a bottler and give you Squashed Bee Material
  4. Put that into a Centrifuge, and it will give you the 6 genes of the bee.

Easy right? But remember, it will only give up to around 20% of the gene per bee, so you need to repeat the process 4-5 times. I\u2019ll show you how to get genes automatically below.

"},{"location":"atm9/productivebees/#gene-automation","title":"Gene Automation","text":"

This is a simple semi-automated setup. I reckon you already know how to set up breeding and incubation to get more bees if you are here.

"},{"location":"atm9/productivebees/#1-the-dispensing-of-bees","title":"1. The Dispensing of Bees","text":"

For this you can just use a vanilla Dispenser + an RFTools Timer to send a pulse to it every 20 ticks, releasing a bee from a cage into the piston area. The lever behind the Timer is just to disable it when you arent using it.

Tip

Make sure you are squishing bees in disposable cages, as those dont cause any clutter and are more straightforward to use

"},{"location":"atm9/productivebees/#2-the-squishing","title":"2. The Squishing","text":"

This is where the bees will be turned into the Squashed Bee Material, the same thing as in the previous explanation. Dont forget to send bottles to the Bottler or it will stop squishing bees.

Tip

If you keep the piston extended, like in the image, the bees will get squashed automatically when you push/dispense them into it.

"},{"location":"atm9/productivebees/#3-processing-bee-material","title":"3. Processing Bee Material","text":"

Using any Item Collector, pick up the Squashed Bee Material and send it to a Centrifuge that separates it into the 6 genes.

"},{"location":"atm9/productivebees/#4-sorting-improving-genes","title":"4. Sorting & Improving Genes.","text":"

After getting the genes out of the centrifuge using whatever pipe you prefer, you can send them into a Gene Indexer. This machine will sort and combine the genes inside when given a redstone signal (Lever or Redstone Block). It will combine all the genes into their 100% version. These are the ones we are looking for, the ones that allow you to change the genes of a bee 100% of the time.

"},{"location":"atm9/productivebees/#optional-step","title":"Optional Step","text":"

Using an item pipe from Pipez that can pull 100% genes with NBT filtering.

Item: productivebees:gene

NBT: {productivebees_gene_purity:100}

"},{"location":"atm9/productivebees/#getting-the-best-genes","title":"Getting the Best Genes","text":"

OK, OK, you already know what genes are, how to get them, and how to automate them. This is what you are here for, the BEST genes. In this section, I\u2019ll discuss the most and least important ones.

Note

My recommendation? Put all your good genes into one bee that you can breed. Then, you will get a baby with the same genes.

From there, breed them -> Squish them -> Get genes -> Make Honey Treats with those genes, and use those to upgrade all your bees.

Tip

You can put multiple genes into the same Honey Treat. I like to call this Bee Steroids, a honey treat with all the best genes.

"},{"location":"atm9/productivebees/#least-important","title":"Least Important","text":"

The least important ones are Temper and Endurance. These two are worthless if you use a Simulation Upgrade or have them in a box.

"},{"location":"atm9/productivebees/#most-important","title":"Most Important","text":""},{"location":"atm9/productivebees/#productivity-very-high","title":"Productivity: Very High","text":"

This one\u2019s the trickiest and most important; this trait can only be gotten from Kamikaze Bees.

Kamikaze Bees spawn in a particular way by being attacked. Their only objective is to protect you by\u2026 well\u2026 going kamikaze on the attacker.

While wearing a Bee Nest Helmet (a Diamond helmet with a Nest on top), if you get hit by a hostile mob, there is a 30% chance of a Kamikaze Bee spawning. The difficult part? They\u2019re TINY and FAST so you need to have a setup inside an enclosed box, have a Catcher ready, or have good aim and cage them once they spawn.

Get 4-5 of them then squeeze them. This should get you a 100% Very High Productivity gene.

Kamikaze Bees can\u2019t breed with each other.

Now, you need to put the gene in an easy-to-breed bee (via Honey Treat + Gene) and breed them, and once an offspring is born with the Very High gene use it to breed more bees of that type. With that, you basically have infinite, Very High Productivity genes.

"},{"location":"atm9/productivebees/#behavior-metaturnal","title":"Behavior: Metaturnal","text":"

To get this trait, a bee needs to be left outside for a few days. If it starts as Diurnal, it will change to Nocturnal, then Metaturnal. If you have Nocturnal bees, that\u2019s better since you are already halfway there.

I recommend using a Lead + a Fence to secure them so they don\u2019t fly away.

You must feed them Honey Treats once in a while because they take damage while they\u2019re stuck outside

"},{"location":"atm9/productivebees/#weather-tolerance-any","title":"Weather Tolerance: Any","text":"

There are 2 ways to obtain this. The slow and the fast way.

The slow: The strategy of leaving the bees outside so they get forced to adapt like the previous one\u2026 OR the fast fishing route.

By fishing I mean fishing for bees, more specifically Water Bees. To get them, you will need to fish in a River biome.

If there aren\u2019t rivers nearby, use a Nature\u2019s Compass to point you to a river.

While using a normal fishing rod, there is a chance for a Water Bee to come out of the water, and it will be MAD, so have a Cage on hand to capture it. You will need 2 of those to breed them to make more and to get that sweet weather tolerance.

"},{"location":"atm9/productivebees/#genes-when-breeding","title":"Genes When Breeding","text":"

When breeding, you must know how genes are assigned to a child bee.

The bee on the Left side will be the Main bee, which is the one with priority gene-wise. This means that the baby will have the genes of the main bee at a minimum.

The bee on the Right only defines the range of gene levels.

In the image below the \u201cmaxed\u201d gene levels of the Main bee (Weather tolerance, behavior, and endurance) gets transferred to the child bee.

Example

If the main bee has Productivity: Medium, and the 2nd bee has Productivity: Very High, the baby will have a chance to have either Medium (the minimum the main bee has), High, or Very High.

You will never get a child bee that has genes of a lower level than the main bee. That\u2019s why I recommend maxing out the 1st bee so it can be used as the main one for breeding.

Productive Bees | CurseForge

"},{"location":"atm9tts/","title":"All The Mods 9 - To The Sky","text":""},{"location":"atm9tts/#all-the-mods-9","title":"All The Mods 9","text":"

All The Mods started out as a private pack for just a few friends that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

All the Mods 9: To the Sky is the cap off to the trilogy of sky packs for All The Mods. The team have taken feedback from the first 2 iterations to make this pack the best we have to offer. This pack adds mods that were not in the others such as Forcecraft, Forgiving Void, Oreberries, and Utilitarian. We\u2019re hoping to make this the most open ended ATM pack yet!

This skyblock pack features Ex Machinis: Divitiae Deorum, an automation addon for Ex Deorum built in house by ATM to take you from early game all the way to end game automated resources

Does \u201cAll the Mods\u201d really contain ALL THE MODS? No, of course not.

All The Mods 9 - To The Sky | CurseForge | GitHub

"},{"location":"atm9tts/faq/","title":"ATM9TTS FAQ","text":""},{"location":"atm9tts/faq/#faq","title":"FAQ","text":"

All The Mods 9 - To The Sky Frequently Asked Questions

Gameplay FAQs How do I get pebbles? Right clicking dirt doesn\u2019t do anything!

You need to shift-right click dirt to get pebbles.

How do I get more dirt?
  • You can put any organic matter (leaves, seeds, saplings, etc.) in the same barrels you use to get witch water.
  • or Hammer some logs and put the chips in the barrel
Is \u2018item/block name\u2019 EMC-able?

Do EMC: in JEI and it\u2019ll list all items that have an EMC value.

I\u2019m not getting any silkworms!

If you\u2019re doing it the right way with a crook, then you might just have really bad RNG. Keep trying.

Technical FAQs Why isn\u2019t \u2018insert name\u2019 mod in ATM9-TTS yet?

ATM packs does not literally contain \u201cAll The Mods\u201d. Our main focus is having mods that\u2019s not: 1) buggy, 2) ruins performance or progression. If a mod supports Minecraft version 1.20.1, and Forge (Not NeoForge), you may make a suggestion.

I found a bug/dupe in the pack. How can I report it?

To report bugs, dupes or similar, head over to the ATM9-TTS GitHub and open a new issue describing the occurrence.

I can\u2019t complete \u2018name of quest\u2019 even though I fufilled the requirements?

You can enable edit quests in the bottom right of the quest screen (you need OP for this) and then r-click the broken quest and force complete it OR reset it\u2019s progress if you still have the items.

What are the recommended Java arguments for this pack?
  • Client arguments: send ?args in the #bot-spam channel in our Discord.
  • Server arguments: send ?svargs in the #bot=spam channel in our Discord.
Why does my game crash while launching?

Lack of RAM most likely. Send ?allocate in the #bot-spam channel in our Discord to learn how to allocate more RAM. If that\u2019s not the problem, head to #atm9-techsupport and send ?logs to see how to upload your crash/latest log.

I crashed and got Error code 1, please help

Exit code 1 is a generic error from Minecraft. It is no different than \u201cgame didn\u2019t load, no longer attempting to load. Please refer to the output error log created by your launcher\u201d if you are unsure\u2026 please feel free to ask for further instructions on how to locate, post, and get help for your specific error so that we may further assist you in our Discord. Try running ?logs instead.

I\u2019m having issues connecting to a LAN/Essentials world

To fix LAN/Essential some people have removed Logprot, some Oculus, some Supplementaries. None are guaranteed, none are the actual fix. We are unable reproduce it in Dev to properly diagnose it. LAN is highly unstable in big modpacks like these.

"},{"location":"atmg/","title":"Gravitas","text":""},{"location":"atmg/#all-the-mods-gravitas","title":"All The Mods - Gravitas","text":""},{"location":"atmg/#per-aspera-ad-astra-through-hardships-to-the-stars","title":"Per aspera ad astra - Through hardships to the stars.","text":"

From your early beginnings in this pack, you will be faced with a far different experience than the typical modpack provides. This modpack includes Terrafirmacraft(TFC), which completely overhauls the base Minecraft mechanics, adds dynamic environments with landslides, cave ins and the concept of support beams add an element of danger to mining that extends beyond the monsters you will find underground. An immersive survival experience with detailed world generation with flowing rivers that have an active current, and flow towards oceans, fresh and salt water, Food has an expiration date, and eating it past its date has dire consequences to your health. This pack takes you on a voyage from picking up sticks to craft your first tools, to piloting a rocket to the stars, Can you claw your way to Glacio to locate the stronghold, and face the Ender Dragon?

All the Mods started out as a private pack for just a few friends of mine that turned into something others wanted to play! It has all the basics that most other \u201cbig name\u201d packs include but with a nice mix of some of newer or lesser-known mods as well.

Does \u201cAll the Mods\u201d really contain ALL THE MODS? No, of course not. Especially not this pack.

All The Mods - Gravitas | CurseForge | GitHub

"},{"location":"atmg/gravitas2/","title":"All The Mods - Gravitas\u00b2","text":""},{"location":"atmg/gravitas2/#all-the-mods-gravitas2","title":"All The Mods - Gravitas\u00b2","text":"

Per aspera ad astra - Through hardships to the stars.

Starting from primitive stone age technology, hand-knapping your tools, foraging for food, you will progress through the ages covering many classic and new mods to complement the TerraFirmaCraft experience.Create New Age, Thorium Reactors, Integrated Dynamics, Applied Energistics, Stargate Journey Ice & Fire and perhaps the most anticipated addition, GregTech. You will voyage from a primitive beginning, smashing rocks together, to smashing atoms together, to power your voyages to the stars and beyond!

Gravitas\u00b2 | CurseForge | Github

"},{"location":"atms/","title":"All The Magic - Spellbound","text":""},{"location":"atms/#all-the-magic-spellbound","title":"All The Magic: Spellbound","text":"

You have conquered all the mods, but can you conquer all the magic? With no tech to hold your hand see the world through different eyes as you rely on what the mystic arts has to offer, With a complete rewrite to the ATM star\u2019s recipe and each mod intertwined, explore the depths of mods such as blood magic and botania to fulfil your needs for storage, flight, and to protect yourself as you explore the dimensions on offer.

All The Mods Magic: Spellbound | CurseForge | GitHub

"},{"location":"atmvb/","title":"All The Mods - Volcano Block","text":""},{"location":"atmvb/#all-the-mods-volcano-block","title":"All The Mods - Volcano Block","text":"

All the mods volcano block is a modpack is both a reimagination of the 1.12 Volcanoblock and also the third sieve based modpack following on from 6 and 7 To the Sky.

Multiple resource paths

Sieving isn\u2019t for everyone, this is a known problem with skyblock packs so we like to open you up to different resource generation types the further you get into the modpack, from Ex Machinis, our built in-house automation mod for ex nihilo, to Mystical Agriculture and Resource Chickens, and even void miners from Occultism and Industrial Foregoing you will never be strapped for diamonds, nor be forced towards one path.

In All the Mods VolcanoBlock we will continue the tradition adding new mods and removing others to change up the feel, whilst keeping to the quality of the To the Sky series

Does \u201cAll The Mods\u201d really contain ALL THE MODS? No, of course not.

All The Mods - Volcano Block | CurseForge | GitHub

"},{"location":"blog/","title":"Blog","text":""},{"location":"blog/posts/new/","title":"Example Blog Post","text":""},{"location":"blog/posts/new/#example","title":"Example","text":"

This is an example post.

"},{"location":"guides/","title":"All The Guides","text":""},{"location":"guides/#all-the-guides","title":"All The Guides","text":""},{"location":"guides/#welcome-to-the-guides","title":"Welcome to the Guides!","text":"

You\u2019ll find various mods in the sidebar with tips on how they can be utilized, as well as how to contribute your own guides to this website or to help contribute translations!

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"guides/biggerreactors/","title":"Bigger Reactors","text":""},{"location":"guides/biggerreactors/#bigger-reactors","title":"Bigger Reactors","text":"

Reactors are the primary multi-block of Bigger Reactors. Loosely inspired by the real-life RBMK design, reactors may be used as either a power generator (in Passive mode) or as a heat source (in Active mode). Reactors consume and produce various Fuel and Waste products, and are highly customizable.

As of Bigger Reactors 0.5.2, the smallest possible reactor size is 3 \u00d7 3 \u00d7 3. With the default config, reactors may be built as large as 128 \u00d7 128 \u00d7 192, however this may be changed to an absolute maximum of 192 \u00d7 192 \u00d7 256.

"},{"location":"guides/biggerreactors/#components","title":"Components","text":""},{"location":"guides/biggerreactors/#required","title":"Required","text":"

The following components are the bare minimum required to construct any type of reactor.

  • Reactor Terminals: are the heart of your reactor.
  • Reactor Casings: make up the frame and walls of your reactor.
  • Fuel Rods: are where Fuel and Waste are contained.
  • Control Rods: are used to maintain control over the reaction.
  • Access Ports: are used to insert Fuel and extract Waste.
"},{"location":"guides/biggerreactors/#type-specific","title":"Type-Specific","text":"

Certain components may only be used with a specific type of reactor, and cannot be used together in the same reactor.

The first type of reactor are Passive Reactors. These output the energy they generate directly as RF, which may be used by other machines.

  • Power Taps are where you extract power from a passive reactor. The second type of reactor are Active Reactors. These convert the energy they generate into heat, which is used to heat up fluids.
  • Coolant Ports are used to insert \u201ccold\u201d fluids (such as water) and extract \u201chot\u201d fluids (such as steam).
  • Coolant Manifolds are used to increase the surface area for heat transfer.
"},{"location":"guides/biggerreactors/#optional","title":"Optional","text":"

Some components are entirely optional and are not required to build a functioning reactor. These may, however, allow for automation and remote control of reactors.

  • Redstone Ports allow for control of various reactor functions via Redstone circuits.
  • Computer Ports allow for control of various reactor functions via Lua scripting. This requires a computers mod such as CC: Tweaked to be installed.
  • Reactor Glass functions identically to casings, but may only be used on walls. It allows you to see inside of the reactor.
"},{"location":"guides/biggerreactors/#moderators","title":"Moderators","text":"

Reactor Moderators (commonly incorrectly referred to as Reactor Coolants) are materials placed inside of a Reactor during construction. When a reactor is in operation, a moderator may change the way the reactor performs depending its properties.

Moderators have four main properties that affect the reactor simulation:

  • Absorption: The speed at which radiation is absorbed and converted to case heat.
  • Efficiency: How efficiently absorbed radiation is converted into heat.
  • Moderation: The effectiveness at which radiation is moderated (\u201csoftened\u201d).
  • Conductivity: How well heat is transferred from the fuel rods to the reactor casing.

In general, higher values are always better (except for absorption, which may be better or worse depending on your reactor design). For a more in-depth explanation on how to use the information here, see the simulation page.

Something to note is that Modpack authors have the ability to add or modify moderators. For an accurate list of supported blocks/fluids, use Just Enough Items (JEI) by checking the uses for the Reactor Terminal (currently broken on multiplayer).

Moderator Properties

The values listed below are accurate for Bigger Reactors 0.5.2, for Minecraft 1.16.5. Also correct for 0.6.x (1.17-1.19)

ID Absorption Efficiency Moderation Conductivity astralsorcery:liquid_starlight 0.85 0.8 2.0 3.0 biggerreactors:ludicrite_block 0.6 0.87 3 3 bloodmagic:life_essence_block 0.7 0.55 1.75 2.5 mekanism:ethene 0.37 0.65 1.9 1.5 mekanism:hydrofluoric_acid 0.6 0.45 1.4 2.5 mekanism:hydrogen 0.2 0.3 1.2 0.1 mekanism:hydrogen_chloride 0.31 0.65 1.7 1 mekanism:lithium 0.7 0.6 1.04 0.7 mekanism:oxygen 0.01 0.35 1.04 0.1 mekanism:sodium 0.23 0.6 1.7 1 mekanism:steam 0.33 0.5 1.33 0.5 mekanismgenerators:deuterium 0.03 0.3 1.07 0.1 minecraft:air 0.1 0.25 1.1 0.05 minecraft:cave_air 0.1 0.25 1.1 0.05 minecraft:glass 0.2 0.25 1.1 0.3 minecraft:ice 0.33 0.33 1.15 0.1 minecraft:snow_block 0.15 0.33 1.05 0.05 minecraft:void_air 0.1 0.25 1.1 0.05 minecraft:water 0.33 0.5 1.33 0.1 minecraft:lava 0.33 0.33 1.15 0.7 forge:storage_blocks/allthemodium 0.66 0.9 3.5 3.5 forge:storage_blocks/aluminum 0.5 0.78 1.42 0.6 forge:storage_blocks/bronze 0.51 0.77 1.41 1 forge:storage_blocks/copper 0.5 0.75 1.4 1 forge:storage_blocks/diamond 0.55 0.85 1.5 3 forge:storage_blocks/electrum 0.53 0.82 1.47 2.2 forge:storage_blocks/emerald 0.55 0.85 1.5 2.5 forge:storage_blocks/enderium 0.53 0.88 1.6 3 forge:storage_blocks/gold 0.52 0.8 1.45 2 forge:storage_blocks/graphite 0.1 0.5 2 2 forge:storage_blocks/invar 0.5 0.79 1.43 0.6 forge:storage_blocks/iron 0.5 0.75 1.4 0.6 forge:storage_blocks/lead 0.75 0.75 1.75 1.5 forge:storage_blocks/lumium 0.75 0.55 1.5 1.8 forge:storage_blocks/nickel 0.5 0.82 1.46 0.6 forge:storage_blocks/osmium 0.51 0.77 1.41 1 forge:storage_blocks/platinum 0.53 0.86 1.58 2.5 forge:storage_blocks/signalum 0.63 0.66 1.5 1.8 forge:storage_blocks/silver 0.51 0.79 1.43 1.5 forge:storage_blocks/steel 0.5 0.78 1.42 0.6 forge:storage_blocks/tin 0.3 0.7 1.35 0.75 forge:storage_blocks/unobtainium 0.95 0.82 2 5 forge:storage_blocks/vibranium 0.15 0.75 8 4 forge:storage_blocks/zinc 0.51 0.77 1.41 1 biggerreactors:liquid_obsidian 0.3 0.7 1.35 0.75 allthemodium:molten_allthemodium 0.66 0.9 3.5 3.5 allthemodium:molten_vibranium 0.15 0.75 8 4 allthemodium:molten_unobtainium 0.95 0.82 2 5 allthemodium:vapor_allthemodium 0.66 0.9 3.5 3.5 allthemodium:vapor_vibranium 0.15 0.75 8 4 allthemodium:vapor_unobtainium 0.95 0.82 2 5 forge:superheated_sodium 0.23 0.6 1.7 1 forge:redstone 0.75 0.55 1.6 2.5 forge:ender 0.9 0.75 2.0 2

Bigger Reactors | CurseForge

"},{"location":"guides/kaimonickguides/","title":"Kaimonick's Guides","text":""},{"location":"guides/kaimonickguides/#kaimonicks-guides","title":"Kaimonick\u2019s Guides","text":"

Click on the images to view them!

Need to know something that isn\u2019t covered here? DM me on

  • Reddit: u/Fiddlesticc
  • Discord: @kaimonick
"},{"location":"guides/kaimonickguides/#apotheosis","title":"Apotheosis","text":""},{"location":"guides/kaimonickguides/#applied-energistics-2","title":"Applied Energistics 2","text":"Part 1: The BasicsPart 2: Intro to AutocraftingPart 3: P2P & Other Novelties"},{"location":"guides/kaimonickguides/#pneumatic-craft","title":"Pneumatic Craft","text":""},{"location":"guides/kaimonickguides/#productive-bees","title":"Productive Bees","text":"Part 1: The BeesicsPart 2: Genes and Advanced InfoPart 3: Addendum"},{"location":"guides/translations/","title":"Contributing Translations","text":""},{"location":"guides/translations/#all-the-translations","title":"All The Translations","text":""},{"location":"guides/translations/#important","title":"Important!","text":"

There is no set or forced timeline for translations. Work on them at your own pace! PR them however you want, either as whole chapters, sections of chapters, or even the whole thing if you want. We are incredibly grateful for any contributions you make!

Also, tell a staff member that you\u2019d like to translate so they can give you access to the #translation-department, where you can ask questions and collaborate with other translators!

Important note for packs in development

If you are translating a pack that is under active development, then you need to use the lang file from the dev branch, not main. The dev branch will always contain the most up-to-date quest lang file that you will translate.

Note regarding AI/Machine translations

We are not looking for AI/Machine translations. We are looking for native speakers who are looking to put in the effort to make sure grammar is correct for readers of that language. We would\u2019ve done it ourselves if we wanted a cheap attempt at quest translations.

"},{"location":"guides/translations/#getting-started","title":"Getting Started","text":"

This guide will take you in chronological order from forking a repo, to committing, and then submitting a pull request.

"},{"location":"guides/translations/#requirements","title":"Requirements","text":"
  • Know the language you want to translate (duh)
  • A text editor (Notepad++ is a great one)
  • Have Github Desktop or Git Cli
    • GitHub Desktop is recommended for those not familiar with Git.
    • For quick edits, you can open a codespace on your forked repo using Github Web Editor.
      • OR edit the lang file directly in your browser. Explained below.
      • OR you can simply download the translation key file then upload to your repository. Explained below.
"},{"location":"guides/translations/#fork-the-repository","title":"Fork the Repository","text":"

Fork the modpack/mod you want to translate.

  • ATM9/No Frills (NF\u2019s quests are the same as 9, just no Greg)
  • ATM9 to the Sky
  • Gravitas 1
  • Gravitas 2

All The Mods GitHub for any modpack that isn\u2019t listed above.

"},{"location":"guides/translations/#clone-main-branch","title":"Clone main branch","text":"

This will Clone your fork from GitHub onto your computer.

GitHub Desktop

Go to File -> Clone repository... OR do Ctrl+Shift+o and select your ATM Modpack fork.

I recommend putting the repository under C:/Users/yourPCName for easy access

Git CLI Change `USERNAME` to your GitHub name and `MODPACK` to the name of your fork
git clone https://github.com/USERNAME/MODPACK\n

After cloning the repository go to where you cloned it on your computer and go to packName/kubejs/assets/kubejs/lang then copy and paste the en_us.json file into the same spot.

Rename the copied en_us.json to the language code of the lanuage you want to translate. All language codes can be found below or here.

"},{"location":"guides/translations/#language-codes","title":"Language Codes","text":"Language Codes (Ctrl+F to find language) Code Language af_ZA Afrikaans (South Africa) ar_AE Arabic (U.A.E.) ar_BH Arabic (Bahrain) ar_DZ Arabic (Algeria) ar_EG Arabic (Egypt) ar_IQ Arabic (Iraq) ar_JO Arabic (Jordan) ar_KW Arabic (Kuwait) ar_LB Arabic (Lebanon) ar_LY Arabic (Libya) ar_MA Arabic (Morocco) ar_OM Arabic (Oman) ar_QA Arabic (Qatar) ar_SA Arabic (Saudi Arabia) ar_SY Arabic (Syria) ar_TN Arabic (Tunisia) ar_YE Arabic (Yemen) az_AZ Azeri (Latin) az_AZ Azeri (Cyrillic) be_BY Belarusian (Belarus) bg_BG Bulgarian (Bulgaria) bs_BA Bosnian (Bosnia and Herzegovina) ca_ES Catalan (Spain) cs_CZ Czech (Czech Republic) cy_GB Welsh (United Kingdom) da_DK Danish (Denmark) de_AT German (Austria) de_CH German (Switzerland) de_DE German (Germany) de_LI German (Liechtenstein) de_LU German (Luxembourg) dv_MV Divehi (Maldives) el_GR Greek (Greece) en_AU English (Australia) en_BZ English (Belize) en_CA English (Canada) en_CB English (Caribbean) en_GB English (United Kingdom) en_IE English (Ireland) en_JM English (Jamaica) en_NZ English (New Zealand) en_PH English (Republic of the Philippines) en_TT English (Trinidad and Tobago) en_US English (United States) en_ZA English (South Africa) en_ZW English (Zimbabwe) es_AR Spanish (Argentina) es_BO Spanish (Bolivia) es_CL Spanish (Chile) es_CO Spanish (Colombia) es_CR Spanish (Costa Rica) es_DO Spanish (Dominican Republic) es_EC Spanish (Ecuador) es_ES Spanish (Castilian) es_ES Spanish (Spain) es_GT Spanish (Guatemala) es_HN Spanish (Honduras) es_MX Spanish (Mexico) es_NI Spanish (Nicaragua) es_PA Spanish (Panama) es_PE Spanish (Peru) es_PR Spanish (Puerto Rico) es_PY Spanish (Paraguay) es_SV Spanish (El Salvador) es_UY Spanish (Uruguay) es_VE Spanish (Venezuela) et_EE Estonian (Estonia) eu_ES Basque (Spain) fa_IR Farsi (Iran) fi_FI Finnish (Finland) fo_FO Faroese (Faroe Islands) fr_BE French (Belgium) fr_CA French (Canada) fr_CH French (Switzerland) fr_FR French (France) fr_LU French (Luxembourg) fr_MC French (Principality of Monaco) gl_ES Galician (Spain) gu_IN Gujarati (India) he_IL Hebrew (Israel) hi_IN Hindi (India) hr_BA Croatian (Bosnia and Herzegovina) hr_HR Croatian (Croatia) hu_HU Hungarian (Hungary) hy_AM Armenian (Armenia) id_ID Indonesian (Indonesia) is_IS Icelandic (Iceland) it_CH Italian (Switzerland) it_IT Italian (Italy) ja_JP Japanese (Japan) ka_GE Georgian (Georgia) kk_KZ Kazakh (Kazakhstan) kn_IN Kannada (India) ko_KR Korean (Korea) kok_IN Konkani (India) ky_KG Kyrgyz (Kyrgyzstan) lt_LT Lithuanian (Lithuania) lv_LV Latvian (Latvia) mi_NZ Maori (New Zealand) mk_MK FYRO Macedonian (Former Yugoslav Republic of Macedonia) mn_MN Mongolian (Mongolia) mr_IN Marathi (India) ms_BN Malay (Brunei Darussalam) ms_MY Malay (Malaysia) mt_MT Maltese (Malta) nb_NO Norwegian (Bokm?l) (Norway) nl_BE Dutch (Belgium) nl_NL Dutch (Netherlands) nn_NO Norwegian (Nynorsk) (Norway) ns_ZA Northern Sotho (South Africa) pa_IN Punjabi (India) pl_PL Polish (Poland) ps_AR Pashto (Afghanistan) pt_BR Portuguese (Brazil) pt_PT Portuguese (Portugal) qu_BO Quechua (Bolivia) qu_EC Quechua (Ecuador) qu_PE Quechua (Peru) ro_RO Romanian (Romania) ru_RU Russian (Russia) sa_IN Sanskrit (India) se_FI Sami (Northern) (Finland) se_FI Sami (Skolt) (Finland) se_FI Sami (Inari) (Finland) se_NO Sami (Northern) (Norway) se_NO Sami (Lule) (Norway) se_NO Sami (Southern) (Norway) se_SE Sami (Northern) (Sweden) se_SE Sami (Lule) (Sweden) se_SE Sami (Southern) (Sweden) sk_SK Slovak (Slovakia) sl_SI Slovenian (Slovenia) sq_AL Albanian (Albania) sr_BA Serbian (Latin) (Bosnia and Herzegovina) sr_BA Serbian (Cyrillic) (Bosnia and Herzegovina) sr_SP Serbian (Latin) (Serbia and Montenegro) sr_SP Serbian (Cyrillic) (Serbia and Montenegro) sv_FI Swedish (Finland) sv_SE Swedish (Sweden) sw_KE Swahili (Kenya) syr_SY Syriac (Syria) ta_IN Tamil (India) te_IN Telugu (India) th_TH Thai (Thailand) tl_PH Tagalog (Philippines) tn_ZA Tswana (South Africa) tr_TR Turkish (Turkey) tt_RU Tatar (Russia) uk_UA Ukrainian (Ukraine) ur_PK Urdu (Islamic Republic of Pakistan) uz_UZ Uzbek (Latin) (Uzbekistan) uz_UZ Uzbek (Cyrillic) (Uzbekistan) vi_VN Vietnamese (Viet Nam) xh_ZA Xhosa (South Africa) zh_CN Chinese (S) zh_HK Chinese (Hong Kong) zh_MO Chinese (Macau) zh_SG Chinese (Singapore) zh_TW Chinese (T) zu_ZA Zulu (South Africa)"},{"location":"guides/translations/#another-optional-way","title":"Another Optional Way","text":"

Instead of copying the entire repo onto your computer, you can also download only the lang file for the respective pack and translate it.

Download the en_us.json lang file from the respective pack, the links below are the most up-to-date files the translations are to be based off of.

  • ATM9/No Frills
  • ATM9 to the Sky
  • Gravitas 1
  • Gravitas 2

For all other packs, the lang file will be under packName/kubejs/assets/kubejs/lang/en_us.json in their respective repositories.

Important

As state in the beginning, if you are translating a pack that is in active development, then you need to use the same file path as above but for the dev branch.

"},{"location":"guides/translations/#how-atm-quests-work","title":"How ATM Quests Work","text":"

Before you get to translating you\u2019ll want to know how ATM quests work. ATM Quests use a key:value system to make quest creation and translation efforts easier. It works by assigning a value (ex: a quest description) to a key (ex: a specific quest).

For example atm9.quest.mekanism.desc.basicAlloy would point to the quest to make Mekanism Alloy.

The format for quests are as follows:

packName.quest/chapterTitle.chapterName.description/title/subtitle.nameOfQuest

ATM quests also use Minecraft Formatting Codes for colored text, so make sure you put those color codes back in after translating!

You will also see //n which puts the text on a new line, so be sure to put those back in their proper places also.

Tip

You can view your translations as you do them by doing /refresh to view changes in-game. Make sure to change Minecraft\u2019s language to view it.

"},{"location":"guides/translations/#commit-updating","title":"Commit (Updating)","text":"

Once you\u2019re committed to your translations, you can then Commit them, then make a Pull Request against both main branches / repositories.

"},{"location":"guides/translations/#committing-changes","title":"Committing Changes","text":"

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You\u2019re free to use this, Github Desktop, or Git.

Making a commit with GitHub Desktop
  1. Fill out the Summary and Description on the bottom left
  2. Click Commit to main when you\u2019re ready to commit.

If you made a mistake, you can undo the commit in the bottom left. Otherwise click Push origin to push the commit to GitHub.

If you downloaded just the lang file
  1. Go to your repository on the website and go to same spot you downloaded the en_us.json lang file from.
  2. Click Add file in the top right and click Upload files
  3. Upload your translated lang file and click Commit changes
Making a commit with Git

Add files to Commit.

git commit .\n

Add a message to your Commit. We recommend being more descriptive about your Commit(s).

git commit -m \"update\"\n

Push changes

git push\n
"},{"location":"guides/translations/#pull-request","title":"Pull Request","text":"

When submitting a PR (Pull Request), you\u2019re requesting us to Pull translations from your Repository (Fork) to be approve & merged into the official pack. This is done in browser by going to the modpack\u2019s repository and creating a PR from your main branch to ours.

"},{"location":"guides/translations/#making-quick-edits","title":"Making Quick Edits","text":"

This requires you to have committed your lang file at least once.

Instead of going through the above process again to do a small correction or addition, you can do an edit directly in your browser!

1. Go to your fork of the pack you are translating and navigate to kubejs/assets/kubejs/lang and click on your lang file.

2. Click the little edit button in the top-right under the History button.

3. After you are done with your edits, click Commit changes... and fill out what changes you made, then click Commit changes

4. Now when you go to the \u201chomepage\u201d of your fork, there should be a yellow banner that has a Compare & pull request button. That will be how you make a PR for your quick edit.

"},{"location":"guides/translations/#more-resources","title":"More Resources","text":"

Most of everything you need to know is explained in this guide, however if you have questions or concerns feel free to ask in the #translation-department!

  • ToshibaMicrowave\u2019s FTBQuests Tutorials
    • This playlist contains short tutorials covering FTB Quests
  • List of Translators
    • List of languages and their translators. You need access to the #translation-department to view the Discord message.
  • List of Language Codes
    • Browser may give you a warning since the site is in http and not https.
  • Minecraft Formatting Codes
    • Instead of using \u00a7, you will use & for all color codes within the quests.

All The Mods | GitHub | Discord

"},{"location":"guides/contributing/","title":"Contributing to ATG","text":""},{"location":"guides/contributing/#all-the-guides","title":"All The Guides","text":""},{"location":"guides/contributing/#contributing-restructuring-coming-soontm","title":"Contributing Restructuring Coming Soon\u2122","text":"

ATG will migrate from pip to pipenv soon\u2122

"},{"location":"guides/contributing/#guidelines","title":"Guidelines","text":"MUST READ

As this guide is currently work-in-progress, guidelines are expected to change.

  1. You may NOT publicly republish All The Guides live on another website.
  2. You may NOT delete or entirely change another author work (except typos / incorrect information), unless given permission to do so from the original Author.
  3. No warnings or errors that prevents mkdocs serve | build.
    1. If you get any errors or warnings, try/get help resolving them before pushing.
    2. You may NOT disable strict mode(s) for any reason.
  4. Your document(s) MUST contain a title and description variable. If you created a page, you may add authors:, and additional variables if necessary. Read Below
  5. Limit or prevent the use of outside links to content (documents or imagery). If possible in the most minimal and or compressed way, include the content with your document.
    1. This would ensure that content will always remain with the guides, for preservation and offline use.
    2. Assets may be included with document(s) within folders in an organized way.
  6. No profanity, and assets and or links to outside websites that contains adult like content, paid material, and or in-appropriate things.
    1. You\u2019ll be banned from future PR\u2019s.
  7. You shall NOT touch mkdocs.yml, requirements.txt, or workflow files, unless authorized, and you know what you\u2019re doing.
  8. Documentation should ONLY be related to All The Mods, if it needs to be.
  9. Javascript is NOT allowed.
  10. Folders & files must be in lowercase letters, with no spaces. Camelcase for image files is allowed.

All The Guides uses Github Pages, MkDocs & Material.

"},{"location":"guides/contributing/#local-serve-build","title":"Local Serve / Build","text":"

We use Github for our Packs, Mods, and Guides for Collaboration, and CI/CD purposes.

You will be required to Serve, and Build this guide, which comes with some minimal Requirements.

"},{"location":"guides/contributing/#requirements","title":"Requirements","text":"
  • Python 3+
  • Git (Github Desktop or Git Cli)
    • Your editor may already have Git integrated
    • For quick edits, you could open a codespace on your forked repo using Github Web Editor.

You\u2019re not required to have knowledge of them (specifically Python), but they must be installed..

"},{"location":"guides/contributing/#setup","title":"Setup","text":"

Fork All The Guides.

"},{"location":"guides/contributing/#clone-checkout-mkdocs-branch","title":"Clone / Checkout mkdocs branch","text":"

The mkdocs branch is the live - up to date branch that should be used primarily. This should be selected by default when you clone the repo.

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You\u2019re free to use this, Github Desktop or Git.

"},{"location":"guides/contributing/#github-desktop","title":"GitHub Desktop","text":"

Go to File -> Clone repository... OR do Ctrl+Shift+O and select your All the Guides fork.

I recommend putting the repository under C:/Users/yourPCName for easy access

"},{"location":"guides/contributing/#git-cli","title":"Git CLI","text":"Change `USERNAME` to your GitHub name
git clone https://github.com/USERNAME/alltheguides\n
"},{"location":"guides/contributing/#enable-workflows","title":"Enable Workflows","text":"Make sure Workflows are enabled, otherwise PR\u2019s will NOT be accepted."},{"location":"guides/contributing/#python-dependencies","title":"Python Dependencies","text":"

All The Guides requires some Python dependencies that\u2019s used to build, and provide features to the Guide itself.

To Install
pip install -r ./requirements.txt --upgrade\n
To Uninstall
pip uninstall -r ./requirements.txt -y\n
"},{"location":"guides/contributing/#serve","title":"Serve","text":"

Serve will launch a server locally to test changes live @ localhost:8000. Importantly, it will provide warnings, errors, and mistakes (spelling errors) disabled for the time being, use Grammarly or another spellchecker . Once changes are satisfied without issues, test Build before you commit / make a Pull Request.

2 methods in serving MkDocs locally

mkdocs serve\n
python -m mkdocs serve\n

mkdocs serve --help

"},{"location":"guides/contributing/#build","title":"Build","text":"

Build will finalize compiling Markdown and output HTML files in the site folder. This folder should be ignored. The build should succeed without any warnings or errors before Committing and submitting a Pull Request.

2 methods in building MkDocs locally

mkdocs build\n
python -m mkdocs build\n

mkdocs build --help

"},{"location":"guides/contributing/#commit-updating","title":"Commit (Updating)","text":"

Once you\u2019re committed to your changes, you can then Commit your changes, then make a Pull Request against both mkdocs branches / repositories.

"},{"location":"guides/contributing/#committing-changes","title":"Committing Changes","text":"

Depending on current setup, you may have an editor (Visual Studio Code), that has Git integration. You\u2019re free to use this, Github Desktop, or Git.

Making a GitHub commit with GitHub Desktop

All changes made will be selected by default, if you do not want to commit some changes, deselect those.

Fill out the Summary and Description on the bottom left, click Commit to mkdocs when you\u2019re ready to commit.

If you made a mistake, you can undo the commit in the bottom left. Otherwise click Push origin to push the commit to GitHub.

Making a Github commit with Git

Add files to Commit.

git commit .\n

Add a message to your Commit. We recommend being more descriptive about your Commit(s).

git commit -m \"update\"\n

Push changes

git push\n
"},{"location":"guides/contributing/#pull-request","title":"Pull Request","text":"

When submitting a Pull Request, you\u2019re requesting us to Pull changes from your Repository (Fork) to be approve & merged into the official Guide. This is done in browser by going to our repository and creating a Pull Request from your mkdocs branch to ours.

"},{"location":"guides/contributing/#making-a-document","title":"Making a Document","text":"

Before we begin, make sure you\u2019ve read the Guidelines.

Documents must be Markdown (.md) files. They can also contain HTML.

This Guide is a mix of Markdown, Material, and PyMarkdown features. Simply placing a .md file within docs/, that file can then be viewed as a page. Note: .md files MUST contain content.

Markdown files should have headers at the start to identify document (Meta / SEO Purposes), and to credit author(s). Without, it\u2019s subjected to be generated based off page content, or be without at all.

"},{"location":"guides/contributing/#document-headers","title":"Document Headers","text":"Warning

Do NOT use Tab to indent a list of authors in the authors section of document headers. It WILL cause errors.

Highlighted lines are required!!

example.md
---\ntitle: Title of Your Document\ndescription: Description of your doc\nauthors: \n - John Doe\n - Second Name\n - Florida Man\ncomments: false\n---\n\n# mainPageHeader\n\nContent.\n\n## someTitle\n\nContent.\n\n> [modName](legacy CurseForge link)\n
Descriptions
  • title:
    • The page title of your document
  • description:
    • The description of your page/what it\u2019s about. Only shows in the embed of links
  • authors:
    • The list of authors that have contributed to this document.
  • comments:
    • Enable/Disable the use of comments on your page. Default: false

Your page should start with a H1 (#) page header!

"},{"location":"guides/contributing/#configure-pages-and-navigation-optional","title":"Configure Pages and Navigation (Optional)","text":"Warning

Do NOT use Tab to indent new lines in .pages files. It WILL cause errors.

Per directory, you can create a .pages file. This can be used to list each and all pages you want to show up on navigation, in your own order.

nav:\n  - page1\n  - page2.md\n\n  - dir/\n  - dir/README.md\n\n  # Can change page titles\n  - \"3 Is better\" : page3\n\n  # Navigation link to another website\n  - \"Google\" : https://google.com\n\n  # custom sub navigation\n  - 'MORE PAGES':\n    - page1\n    - page2\n\n  - page1\n    - page2\n    - page3\n\n  # 3 dots will auto generate the rest of the pages you've not defined from current directory\n  - ...\n
"},{"location":"guides/contributing/#directory-page-layout","title":"Directory / Page Layout","text":"

This is the directory layout that MkDocs uses.

  • docs | Main folder MkDocs will build site contents
    • cats | Custom site directory that can be accessed from /cats/
      • .pages | Optionally can be used to organize sidebar pages/hierarchy.
      • README.md | Root directory file that should be in each folder.
      • food.md | A page that can be accessed from /cats/food
    • .pages | Optionally can be used to organize sidebar pages/hierarchy.
    • README.md | Root directory file that should be in each folder.
    • name.md | Your unique page name.
README.md Is the root directory file, if no page is visited specifically."},{"location":"guides/contributing/#more-resources","title":"More Resources","text":"

Most of all necessary plugins are installed and can be used from Material / PyMarkdown, however consult the team for any additions.

  • Examples of most of all Markdown features
  • Writing Your Docs
  • Material MarkDown
  • PyMarkdown Extension

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"guides/contributing/examples/","title":"Examples","text":""},{"location":"guides/contributing/examples/#examples","title":"Examples","text":"

These are example pages. It\u2019s recommended that you view (click edit top right) to see how certain markdown features work if there\u2019s no raw example.

Most of all references are exclusively from Material Markdown References

"},{"location":"guides/contributing/examples/admonition/","title":"Admonition","text":""},{"location":"guides/contributing/examples/admonition/#admonition","title":"Admonition","text":"

Admonitions, also known as call-outs, are an excellent choice for including side content without significantly interrupting the document flow. Material for MkDocs provides several different types of admonitions and allows for the inclusion and nesting of arbitrary content.

Admonitions follow a simple syntax: a block starts with !!!, followed by a single keyword used as a type qualifier. The content of the block follows on the next line, indented by four spaces (2 Tabs):

"},{"location":"guides/contributing/examples/admonition/#type-qualifiers","title":"Type Qualifiers","text":"
  • Note
  • Abstract
  • Info
  • Top
  • Success
  • Question
  • Warning
  • Failure
  • Danger
  • Bug
  • Example
  • Quote
!!! note \n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod\n    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor\n    massa, nec semper lorem quam in massa.\n

Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

"},{"location":"guides/contributing/examples/admonition/#changing-the-title","title":"Changing the title\u00b6","text":"

By default, the title will equal the type qualifier in titlecase. However, it can be changed by adding a quoted string containing valid Markdown (including links, formatting, \u2026) after the type qualifier:

!!! note \"Phasellus posuere in sem ut cursus\"\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod\n    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor\n    massa, nec semper lorem quam in massa.\n

Phasellus posuere in sem ut cursus

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

!!! note \"Single line note\"\n

Single line note

"},{"location":"guides/contributing/examples/admonition/#removing-the-title","title":"Removing the title","text":"

Similar to changing the title, the icon and title can be omitted entirely by adding an empty string directly after the type qualifier. Note that this will not work for collapsible blocks:

!!! note \"\"\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod\n    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor\n    massa, nec semper lorem quam in massa.\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

"},{"location":"guides/contributing/examples/admonition/#collapsible-blocks","title":"Collapsible blocks","text":"
??? note\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod\n    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor\n    massa, nec semper lorem quam in massa.\n
Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Adding a + after the ??? token renders the block expanded:

???+ note\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod\n    nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor\n    massa, nec semper lorem quam in massa.\n
Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

"},{"location":"guides/contributing/examples/admonition/#types","title":"Types","text":""},{"location":"guides/contributing/examples/admonition/#note","title":"Note","text":"Note
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#abstract","title":"Abstract","text":"Abstract
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#info","title":"Info","text":"Info
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#tip","title":"Tip","text":"Tip
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#success","title":"Success","text":"Success
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#question","title":"Question","text":"Question
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#warning","title":"Warning","text":"Warning
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#failure","title":"Failure","text":"Failure
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#danger","title":"Danger","text":"Danger
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#bug","title":"Bug","text":"Bug
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#example","title":"Example","text":"Example
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
"},{"location":"guides/contributing/examples/admonition/#quote","title":"Quote","text":"Quote
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.\n
Stacked Admonitions Abstract Info Tip Success Question Warning Failure Danger Bug Example

Hey! You found a secret hidden easter egg :P

"},{"location":"guides/contributing/examples/admonition/#inline-blocks","title":"Inline blocks","text":"

Use inline end to align to the right (left for rtl languages).

"},{"location":"guides/contributing/examples/admonition/#-inline-end","title":"-> Inline End","text":"
!!! info inline end \"Lorem ipsum\"\n\n    Right Lorem ipsum dolor sit amet, consectetur\n    adipiscing elit. Nulla et euismod nulla.\n    Curabitur feugiat, tortor non consequat\n    finibus, justo purus auctor massa, nec\n    semper lorem quam in massa.\n

Lorem ipsum

Left Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

"},{"location":"guides/contributing/examples/admonition/#inline","title":"< Inline","text":"
!!! info inline \"Lorem ipsum\"\n\n    Lorem ipsum dolor sit amet, consectetur\n    adipiscing elit. Nulla et euismod nulla.\n    Curabitur feugiat, tortor non consequat\n    finibus, justo purus auctor massa, nec\n    semper lorem quam in massa.\n

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

"},{"location":"guides/contributing/examples/annotations/","title":"Annotations","text":""},{"location":"guides/contributing/examples/annotations/#annotations","title":"Annotations","text":"

One of the flagship features of Material for MkDocs is the ability to inject annotations \u2013 little markers that can be added almost anywhere in a document and expand a tooltip containing arbitrary Markdown on click or keyboard focus.

"},{"location":"guides/contributing/examples/annotations/#using-annotations","title":"Using Annotations","text":"

Annotations consist of two parts: a marker, which can be placed anywhere in a block marked with the annotate class, and content located in a list below the block containing the marker:

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.\n{ .annotate }\n\n1.  :man_raising_hand: I'm an annotation! I can contain `code`, __formatted\n    text__, images, ... basically anything that can be expressed in Markdown.\n

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. I\u2019m an annotation! I can contain code, formatted text, images, \u2026 basically anything that can be expressed in Markdown.

Note that the annotate class must only be added to the outermost block. All nested elements can use the same list to define annotations, except when annotations are nested themselves.

"},{"location":"guides/contributing/examples/annotations/#in-superfetch","title":"In SuperFetch","text":"

Annotations can also be nested inside annotations by adding the annotate class to the list item hosting the annotation content, repeating the process:

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.\n{ .annotate }\n\n1.  :man_raising_hand: I'm an annotation! (1)\n    { .annotate }\n\n    1.  :woman_raising_hand: I'm an annotation as well!\n

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. I\u2019m an annotation! (1)

    1. I\u2019m an annotation as well!
"},{"location":"guides/contributing/examples/annotations/#in-admonitions","title":"In Admonitions","text":"

The titles and bodies of admonitions can also host annotations by adding the annotate modifier after the type qualifier, which is similar to how inline blocks work:

!!! note annotate \"Phasellus posuere in sem ut cursus (1)\"\n\n    Lorem ipsum dolor sit amet, (2) consectetur adipiscing elit. Nulla et\n    euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo\n    purus auctor massa, nec semper lorem quam in massa.\n\n1.  :man_raising_hand: I'm an annotation!\n2.  :woman_raising_hand: I'm an annotation as well!\n
"},{"location":"guides/contributing/examples/annotations/#in-content-tabs","title":"In Content Tabs","text":"

Content tabs can host annotations by adding the annotate class to the block of a dedicated content tab (and not to the container, which is not supported):

=== \"Tab 1\"\n\n    Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.\n    { .annotate }\n\n    1.  :man_raising_hand: I'm an annotation!\n\n=== \"Tab 2\"\n\n    Phasellus posuere in sem ut cursus (1)\n    { .annotate }\n\n    1.  :woman_raising_hand: I'm an annotation as well!\n
Tab 1Tab 2

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. I\u2019m an annotation!

Phasellus posuere in sem ut cursus (1)

  1. I\u2019m an annotation as well!
"},{"location":"guides/contributing/examples/annotations/#in-everything-else","title":"In Everything Else","text":"

Tt\u2019s always possible to leverage the Markdown in HTML extension to wrap arbitrary elements with a div with the annotate class:

<div class=\"annotate\" markdown>\n\n> Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.\n\n</div>\n\n1.  :man_raising_hand: I'm an annotation!\n

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit.

  1. I\u2019m an annotation!

With this trick, annotations can also be added to blockquotes, lists, and many other elements that are not supported by the Attribute Lists extension. Furthermore, note that code blocks follow different semantics.

"},{"location":"guides/contributing/examples/buttons/","title":"Buttons","text":""},{"location":"guides/contributing/examples/buttons/#buttons","title":"Buttons","text":"

Material for MkDocs provides dedicated styles for primary and secondary buttons that can be added to any link, label or button element. This is especially useful for documents or landing pages with dedicated call-to-actions.

"},{"location":"guides/contributing/examples/buttons/#buttons_1","title":"Buttons","text":"

In order to render a link as a button, suffix it with curly braces and add the .md-button class selector to it.

[Subscribe to our newsletter](#){ .md-button }

Subscribe to our newsletter

"},{"location":"guides/contributing/examples/buttons/#adding-primary-buttons","title":"Adding primary buttons\u00b6","text":"

If you want to display a filled, primary button (like on the landing page of Material for MkDocs), add both, the .md-button and .md-button\u2013primary CSS class selectors.

[Subscribe to our newsletter](#){ .md-button .md-button--primary }

Subscribe to our newsletter

"},{"location":"guides/contributing/examples/buttons/#adding-icon-buttons","title":"Adding icon buttons\u00b6","text":"

Of course, icons can be added to all types of buttons by using the icon syntax together with any valid icon shortcode, which can be easily found with a few keystrokes through icon search.

[Send :fontawesome-solid-paper-plane:](#){ .md-button }

Send

"},{"location":"guides/contributing/examples/code/","title":"Code","text":""},{"location":"guides/contributing/examples/code/#code","title":"Code","text":"
``` py\nimport tensorflow as tf\n```\n
import tensorflow as tf\n
"},{"location":"guides/contributing/examples/code/#adding-titles","title":"Adding Titles","text":"

In order to provide additional context, a custom title can be added to a code block by using the title=\"<custom title>\" option directly after the shortcode, e.g. to display the name of a file:

``` py title=\"bubble_sort.py\"\ndef bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n```\n
bubble_sort.py
def bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n
"},{"location":"guides/contributing/examples/code/#adding-annotations","title":"Adding annotations","text":"

Code annotations can be placed anywhere in a code block where a comment for the language of the block can be placed, e.g. for JavaScript in // ... and /* ... */, for YAML in # ..., etc.

``` yaml\ntheme:\n  features:\n    - content.code.annotate # (1)\n```\n\n1.  :man_raising_hand: I'm a code annotation! I can contain `code`, __formatted\n    text__, images, ... basically anything that can be written in Markdown.\n
theme:\n  features:\n    - content.code.annotate # (1)\n
  1. I\u2019m a code annotation! I can contain code, formatted text, images, \u2026 basically anything that can be written in Markdown.
"},{"location":"guides/contributing/examples/code/#stripping-comments","title":"Stripping comments","text":"

If you wish to strip the comment characters surrounding a code annotation, simply add an ! after the closing parenthesis of the code annotation:

``` yaml\n# (1)!\n```\n\n1.  Look ma, less line noise!\n
# (1)!\n
  1. Look ma, less line noise!
"},{"location":"guides/contributing/examples/code/#adding-line-numbers","title":"Adding line numbers","text":"

Line numbers can be added to a code block by using the linenums=\"<start>\" option directly after the shortcode, whereas <start> represents the starting line number. A code block can start from a line number other than 1, which allows to split large code blocks for readability:

``` py linenums=\"1\"\ndef bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n```\n
def bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n
"},{"location":"guides/contributing/examples/code/#highlighting-specific-lines","title":"Highlighting specific lines","text":"

Specific lines can be highlighted by passing the line numbers to the hl_lines argument placed right after the language shortcode. Note that line counts start at 1, regardless of the starting line number specified as part of linenums:

``` py hl_lines=\"2 3\"\ndef bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n```\n
def bubble_sort(items):\n    for i in range(len(items)):\n        for j in range(len(items) - 1 - i):\n            if items[j] > items[j + 1]:\n                items[j], items[j + 1] = items[j + 1], items[j]\n
"},{"location":"guides/contributing/examples/code/#highlighting-inline-code-blocks","title":"Highlighting inline code blocks","text":"

Syntax highlighting can be applied to inline code blocks by prefixing them with a shebang, i.e. #!, directly followed by the corresponding language shortcode.

The `#!python range()` function is used to generate a sequence of numbers.\n

The range() function is used to generate a sequence of numbers.

"},{"location":"guides/contributing/examples/contenttabs/","title":"Content Tabs","text":""},{"location":"guides/contributing/examples/contenttabs/#content-tabs","title":"Content Tabs","text":"

Sometimes, it\u2019s desirable to group alternative content under different tabs, e.g. when describing how to access an API from different languages or environments. Material for MkDocs allows for beautiful and functional tabs, grouping code blocks and other content.

"},{"location":"guides/contributing/examples/contenttabs/#grouping-code-blocks","title":"Grouping Code Blocks","text":"
=== \"C\"\n\n    ``` c\n    #include <stdio.h>\n\n    int main(void) {\n      printf(\"Hello world!\\n\");\n      return 0;\n    }\n    ```\n\n=== \"C++\"\n\n    ``` c++\n    #include <iostream>\n\n    int main(void) {\n      std::cout << \"Hello world!\" << std::endl;\n      return 0;\n    }\n    ```\n
CC++
#include <stdio.h>\n\nint main(void) {\n  printf(\"Hello world!\\n\");\n  return 0;\n}\n
#include <iostream>\n\nint main(void) {\n  std::cout << \"Hello world!\" << std::endl;\n  return 0;\n}\n
"},{"location":"guides/contributing/examples/contenttabs/#grouping-other-content","title":"Grouping Other Content","text":"
=== \"Unordered list\"\n\n    * Sed sagittis eleifend rutrum\n    * Donec vitae suscipit est\n    * Nulla tempor lobortis orci\n\n=== \"Ordered list\"\n\n    1. Sed sagittis eleifend rutrum\n    2. Donec vitae suscipit est\n    3. Nulla tempor lobortis orci\n
Unordered listOrdered list
  • Sed sagittis eleifend rutrum
  • Donec vitae suscipit est
  • Nulla tempor lobortis orci
  1. Sed sagittis eleifend rutrum
  2. Donec vitae suscipit est
  3. Nulla tempor lobortis orci
"},{"location":"guides/contributing/examples/contenttabs/#embedded-content","title":"Embedded Content","text":"
!!! example\n\n    === \"Unordered List\"\n\n        ``` markdown\n        * Sed sagittis eleifend rutrum\n        * Donec vitae suscipit est\n        * Nulla tempor lobortis orci\n        ```\n\n    === \"Ordered List\"\n\n        ``` markdown\n        1. Sed sagittis eleifend rutrum\n        2. Donec vitae suscipit est\n        3. Nulla tempor lobortis orci\n        ```\n

Example

Unordered ListOrdered List
* Sed sagittis eleifend rutrum\n* Donec vitae suscipit est\n* Nulla tempor lobortis orci\n
1. Sed sagittis eleifend rutrum\n2. Donec vitae suscipit est\n3. Nulla tempor lobortis orci\n
"},{"location":"guides/contributing/examples/datatables/","title":"Data Tables","text":""},{"location":"guides/contributing/examples/datatables/#data-tables","title":"Data Tables","text":"

Data tables can be used at any position in your project documentation and can contain arbitrary Markdown, including inline code blocks, as well as icons and emojis:

| Method      | Description                          |\n| ----------- | ------------------------------------ |\n| `GET`       | :material-check:     Fetch resource  |\n| `PUT`       | :material-check-all: Update resource |\n| `DELETE`    | :material-close:     Delete resource |\n
Method Description GET Fetch resource PUT Update resource DELETE Delete resource"},{"location":"guides/contributing/examples/datatables/#content-alignment","title":"Content Alignment","text":"

If you want to align a specific column to the left, center or right, you can use the regular Markdown syntax placing : characters at the beginning and/or end of the divider.

"},{"location":"guides/contributing/examples/datatables/#left","title":"Left","text":"
| Method      | Description                          |\n| :---------- | :----------------------------------- |\n| `GET`       | :material-check:     Fetch resource  |\n| `PUT`       | :material-check-all: Update resource |\n| `DELETE`    | :material-close:     Delete resource |\n
Method Description GET Fetch resource PUT Update resource DELETE Delete resource"},{"location":"guides/contributing/examples/datatables/#center","title":"Center","text":"
| Method      | Description                          |\n| :---------: | :----------------------------------: |\n| `GET`       | :material-check:     Fetch resource  |\n| `PUT`       | :material-check-all: Update resource |\n| `DELETE`    | :material-close:     Delete resource |\n
Method Description GET Fetch resource PUT Update resource DELETE Delete resource"},{"location":"guides/contributing/examples/datatables/#right","title":"Right","text":"
| Method      | Description                          |\n| ----------: | -----------------------------------: |\n| `GET`       | :material-check:     Fetch resource  |\n| `PUT`       | :material-check-all: Update resource |\n| `DELETE`    | :material-close:     Delete resource |\n
Method Description GET Fetch resource PUT Update resource DELETE Delete resource"},{"location":"guides/contributing/examples/diagrams/","title":"Diagrams","text":""},{"location":"guides/contributing/examples/diagrams/#diagrams","title":"Diagrams","text":"

Powered by Mermaid.JS

"},{"location":"guides/contributing/examples/diagrams/#flow-chars","title":"Flow Chars","text":"

Flowcharts are diagrams that represent workflows or processes. The steps are rendered as nodes of various kinds and are connected by edges, describing the necessary order of steps:

``` mermaid\ngraph LR\n  A[Start] --> B{Error?};\n  B -->|Yes| C[Hmm...];\n  C --> D[Debug];\n  D --> B;\n  B ---->|No| E[Yay!];\n```\n
graph LR\n  A[Start] --> B{Error?};\n  B -->|Yes| C[Hmm...];\n  C --> D[Debug];\n  D --> B;\n  B ---->|No| E[Yay!];
"},{"location":"guides/contributing/examples/diagrams/#sequence-diagrams","title":"Sequence Diagrams","text":"

Sequence diagrams describe a specific scenario as sequential interactions between multiple objects or actors, including the messages that are exchanged between those actors:

``` mermaid\nsequenceDiagram\n  autonumber\n  Alice->>John: Hello John, how are you?\n  loop Healthcheck\n      John->>John: Fight against hypochondria\n  end\n  Note right of John: Rational thoughts!\n  John-->>Alice: Great!\n  John->>Bob: How about you?\n  Bob-->>John: Jolly good!\n```\n
sequenceDiagram\n  autonumber\n  Alice->>John: Hello John, how are you?\n  loop Healthcheck\n      John->>John: Fight against hypochondria\n  end\n  Note right of John: Rational thoughts!\n  John-->>Alice: Great!\n  John->>Bob: How about you?\n  Bob-->>John: Jolly good!
"},{"location":"guides/contributing/examples/diagrams/#state-diagrams","title":"State Diagrams","text":"

State diagrams are a great tool to describe the behavior of a system, decomposing it into a finite number of states, and transitions between those states:

``` mermaid\nstateDiagram-v2\n  state fork_state <<fork>>\n    [*] --> fork_state\n    fork_state --> State2\n    fork_state --> State3\n\n    state join_state <<join>>\n    State2 --> join_state\n    State3 --> join_state\n    join_state --> State4\n    State4 --> [*]\n```\n
stateDiagram-v2\n  state fork_state <<fork>>\n    [*] --> fork_state\n    fork_state --> State2\n    fork_state --> State3\n\n    state join_state <<join>>\n    State2 --> join_state\n    State3 --> join_state\n    join_state --> State4\n    State4 --> [*]
"},{"location":"guides/contributing/examples/diagrams/#class-diagrams","title":"Class Diagrams","text":"
``` mermaid\nclassDiagram\n  Person <|-- Student\n  Person <|-- Professor\n  Person : +String name\n  Person : +String phoneNumber\n  Person : +String emailAddress\n  Person: +purchaseParkingPass()\n  Address \"1\" <-- \"0..1\" Person:lives at\n  class Student{\n    +int studentNumber\n    +int averageMark\n    +isEligibleToEnrol()\n    +getSeminarsTaken()\n  }\n  class Professor{\n    +int salary\n  }\n  class Address{\n    +String street\n    +String city\n    +String state\n    +int postalCode\n    +String country\n    -validate()\n    +outputAsLabel()  \n  }\n```\n
classDiagram\n  Person <|-- Student\n  Person <|-- Professor\n  Person : +String name\n  Person : +String phoneNumber\n  Person : +String emailAddress\n  Person: +purchaseParkingPass()\n  Address \"1\" <-- \"0..1\" Person:lives at\n  class Student{\n    +int studentNumber\n    +int averageMark\n    +isEligibleToEnrol()\n    +getSeminarsTaken()\n  }\n  class Professor{\n    +int salary\n  }\n  class Address{\n    +String street\n    +String city\n    +String state\n    +int postalCode\n    +String country\n    -validate()\n    +outputAsLabel()  \n  }
"},{"location":"guides/contributing/examples/diagrams/#entity-relationship-diagrams","title":"Entity-Relationship Diagrams","text":"

An entity-relationship diagram is composed of entity types and specifies relationships that exist between entities. It describes inter-related things in a specific domain of knowledge:

``` mermaid\nerDiagram\n  CUSTOMER ||--o{ ORDER : places\n  ORDER ||--|{ LINE-ITEM : contains\n  LINE-ITEM {\n    string name\n    int pricePerUnit\n  }\n  CUSTOMER }|..|{ DELIVERY-ADDRESS : uses\n```\n
erDiagram\n  CUSTOMER ||--o{ ORDER : places\n  ORDER ||--|{ LINE-ITEM : contains\n  LINE-ITEM {\n    string name\n    int pricePerUnit\n  }\n  CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
"},{"location":"guides/contributing/examples/formatting/","title":"Formatting","text":""},{"location":"guides/contributing/examples/formatting/#formatting","title":"Formatting","text":"

This page will go over extra typography features. If you\u2019re not familiar with Markdown, it\u2019s best to read Markdown Cheatsheet

Critic Markup can be used, which adds the ability to highlight suggested changes, as well as add inline comments to a document:

Text can be deleted and replacement text added. This can also be combined into onea single operation. Highlighting is also possible and comments can be added inline.

Formatting can also be applied to blocks by putting the opening and closing tags on separate lines and adding new lines between the tags and the content.

"},{"location":"guides/contributing/examples/formatting/#highlighting-text","title":"Highlighting Text","text":"

Text can be highlighted with a simple syntax, which is more convenient that directly using the corresponding mark, ins and del HTML tags:

- ==This was marked==\n- ^^This was inserted^^\n- ~~This was deleted~~\n
  • This was marked
  • This was inserted
  • This was deleted
"},{"location":"guides/contributing/examples/formatting/#sub-and-super-scripts","title":"Sub and Super Scripts","text":"

Text can be sub- and superscripted with a simple syntax, which is more convenient than directly using the corresponding sub and sup HTML tags:

- H~2~O\n- A^T^A\n
  • H2O
  • ATA
"},{"location":"guides/contributing/examples/formatting/#adding-keyboard-keys","title":"Adding keyboard keys","text":"

Keyboard keys can be rendered with a simple syntax. Consult the Python Markdown Extensions documentation to learn about all available shortcodes:

++ctrl+alt+del++\n\n++up+down+left+right++\n\n++lbutton+mbutton+rbutton++\n

Ctrl+Alt+Del

Up+Down+Left+Right

Left Button+Middle Button+Right Button

"},{"location":"guides/contributing/examples/formatting/#lists","title":"Lists","text":""},{"location":"guides/contributing/examples/formatting/#un-ordered-lists","title":"Un-Ordered Lists","text":"
- Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur\n  accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh\n  lacinia sed. Aenean in finibus diam.\n\n    * Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.\n    * Nam vulputate tincidunt fringilla.\n    * Nullam dignissim ultrices urna non auctor.\n
  • Nulla et rhoncus turpis. Mauris ultricies elementum leo. Duis efficitur accumsan nibh eu mattis. Vivamus tempus velit eros, porttitor placerat nibh lacinia sed. Aenean in finibus diam.

    • Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.
    • Nam vulputate tincidunt fringilla.
    • Nullam dignissim ultrices urna non auctor.
"},{"location":"guides/contributing/examples/formatting/#ordered-lists","title":"Ordered Lists","text":"
1.  Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis\n    sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis\n    nulla. Vivamus a pharetra leo.\n\n    1.  Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet\n        quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a\n        ultricies libero efficitur sed.\n\n    2.  Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet\n        rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a.\n\n        1.  Mauris dictum mi lacus\n        2.  Ut sit amet placerat ante\n        3.  Suspendisse ac eros arcu\n
  1. Vivamus id mi enim. Integer id turpis sapien. Ut condimentum lobortis sagittis. Aliquam purus tellus, faucibus eget urna at, iaculis venenatis nulla. Vivamus a pharetra leo.

    1. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a. Nam vehicula nunc mauris, a ultricies libero efficitur sed.

    2. Morbi eget dapibus felis. Vivamus venenatis porttitor tortor sit amet rutrum. Pellentesque aliquet quam enim, eu volutpat urna rutrum a.

      1. Mauris dictum mi lacus
      2. Ut sit amet placerat ante
      3. Suspendisse ac eros arcu
"},{"location":"guides/contributing/examples/formatting/#definition-lists","title":"Definition Lists:","text":"
`Lorem ipsum dolor sit amet`\n\n:   Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus\n    tellus non sem sollicitudin, quis rutrum leo facilisis.\n\n`Cras arcu libero`\n\n:   Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin\n    ut eros sed sapien ullamcorper consequat. Nunc ligula ante.\n\n    Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis.\n    Nam vulputate tincidunt fringilla.\n    Nullam dignissim ultrices urna non auctor.\n
Lorem ipsum dolor sit amet

Sed sagittis eleifend rutrum. Donec vitae suscipit est. Nullam tempus tellus non sem sollicitudin, quis rutrum leo facilisis.

Cras arcu libero

Aliquam metus eros, pretium sed nulla venenatis, faucibus auctor ex. Proin ut eros sed sapien ullamcorper consequat. Nunc ligula ante.

Duis mollis est eget nibh volutpat, fermentum aliquet dui mollis. Nam vulputate tincidunt fringilla. Nullam dignissim ultrices urna non auctor.

"},{"location":"guides/contributing/examples/formatting/#task-lists","title":"Task Lists","text":"
- [x] Lorem ipsum dolor sit amet, consectetur adipiscing elit\n- [ ] Vestibulum convallis sit amet nisi a tincidunt\n    * [x] In hac habitasse platea dictumst\n    * [x] In scelerisque nibh non dolor mollis congue sed et metus\n    * [ ] Praesent sed risus massa\n- [ ] Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque\n
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit
  • Vestibulum convallis sit amet nisi a tincidunt
    • In hac habitasse platea dictumst
    • In scelerisque nibh non dolor mollis congue sed et metus
    • Praesent sed risus massa
  • Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque
"},{"location":"guides/contributing/examples/formatting/#tool-tips","title":"Tool Tips","text":"

The Markdown syntax allows to specify a title for each link, which will render as a tooltip. Add a tooltip to a link with the following lines:

Link Tooltip Title
[Hover me](https://example.com \"I'm a tooltip!\")\n

Hover me

Link Reference Tooltip
[Hover me][example]\n\n  [example]: https://example.com \"I'm a tooltip!\"\n

Tooltips can also be added to link references:

Hover me

For all other elements, a title can be added by using the Attribute Lists extension:

:material-information-outline:{ title=\"Important information\" }\n

"},{"location":"guides/contributing/examples/formatting/#adding-abbreviations","title":"Adding abbreviations","text":"

Abbreviations can be defined by using a special syntax similar to URLs and footnotes, starting with a * and immediately followed by the term or acronym to be associated in square bracket. Once an abbreviation is defined, it can be used anywhere in the document.

Example Abbreviation Usage
The HTML specification is maintained by the W3C.\n\n*[HTML]: Hyper Text Markup Language\n*[W3C]: World Wide Web Consortium\n

The HTML specification is maintained by the W3C.

"},{"location":"guides/contributing/examples/formatting/#adding-a-glossary","title":"Adding a glossary","text":"Example Glossary
Lorem ipsum[^1] dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor \nincididunt ut labore et dolore magna aliqua. Ut enim[^2] ad minim veniam, quis nostrud \nexercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\n  [^1]:\n    This is a glossary that will be added at the bottom of the page and is clickable.\n  [^2]:\n    This is also a glossary at the end of the page.\n
Lorem ipsum1 dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim2 ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."},{"location":"guides/contributing/examples/formatting/#adding-hidden-comments","title":"Adding Hidden Comments","text":"

You can add comments within an document to communicate with other contributors that may edit the file.

<!--- This comment will not be rendered in the final HTML file. --->

<!--- \nThis comment will also not be rendered in the final HTML file. \n--->\n

However these will show in \u201cView Source\u201d if a user does so. To prevent that there is another way to add comments.

[//]: # (This type of comment will not show in either the final HTML or in \"View Source\")

  1. This is a glossary that will be added at the bottom of the page and is clickable.\u00a0\u21a9

  2. This is also a glossary at the end of the page.\u00a0\u21a9

"},{"location":"guides/contributing/examples/imagery/","title":"Imagery","text":""},{"location":"guides/contributing/examples/imagery/#imagery","title":"Imagery","text":""},{"location":"guides/contributing/examples/imagery/#resizing","title":"Resizing","text":"

Images can be done as normal,

![](link_to_image.png)

Images can also be clicked, but if wondering you can put captions inside []

![All The Mods Logo](link_to_image.png)

However you can also define sizes for images, as you would with CSS.

![](link_to_image.png){width='25px'}

Within {} you can define your HTML tag attributes. You could even use style

![](link_to_image.png){style='width: 50px'}

And multiple attributes at that

![](link_to_image.png){width='75px' height='75px'}

Note: A space cannot be between the link and {}.

You can also center images on the page using {.center}, and or {.right}

![](link_to_image.png){.center width='75px' height='75px'}

![](link_to_image.png){.right width='75px' height='75px'}

![](link_to_image.png){.center}

"},{"location":"guides/contributing/examples/imagery/#images-with-links","title":"Images With Links","text":"

Similar to images, clicking images below would redirect you too google

[![](link_to_image.png)](https:/google.com)

You can also use the same attribute properties for width, height, style, etc

[![](link_to_image.png){width='100px' height='100px'}](https:/google.com)

"},{"location":"guides/contributing/examples/imagery/#gifs","title":"Gifs","text":"

Works the same way as images.

"},{"location":"guides/contributing/examples/imagery/#videos","title":"Videos","text":"

![type:video](url_to_video.mp4)

YouTube embed links & html iframe can also work. https://youtube.com/embed/<VIDEO_ID>

"},{"location":"guides/contributing/examples/imagery/#styles","title":"Styles","text":"

As before you can use style (CSS) to add some more customizations

![](link_to_image.png){style='border: 3px solid red; transform: rotate(45deg); width: 125px; height: 125px'}\n

"},{"location":"guides/integrateddynamics/","title":"Integrated Dynamics","text":""},{"location":"guides/integrateddynamics/#integrated-dynamics","title":"Integrated Dynamics","text":"

Integrated Dynamics is a mod which allows you to build networks for complex automation and system integration.

Integrated Dynamics

"},{"location":"guides/integrateddynamics/infinitefluidtransfer/","title":"Infinite Fluid Transfer","text":""},{"location":"guides/integrateddynamics/infinitefluidtransfer/#infinite-fluid-transfer","title":"Infinite Fluid Transfer","text":""},{"location":"guides/integrateddynamics/infinitefluidtransfer/#items-required","title":"Items Required","text":"
  • Sink (or other infinite fluid source)
  • Variable Card
  • Logic Cable
  • Fluid Interface
  • Fluid Exporter
"},{"location":"guides/integrateddynamics/infinitefluidtransfer/#setting-it-up","title":"Setting it up","text":"
  1. Place a Sink down where you want it
  2. Put the Fluid Interface on the Sink via crouch + right-click
  3. Put a Fluid Exporter on the block you want to export fluid into, also by crouch + right-clicking
  4. Connect the Fluid Interface and Fluid Exporter with Logic Cables
  5. Right-click the Fluid Exporter to open an interface
  6. Insert a Variable Card in the Export All Fluids row
  7. Click the + icon on the Export All Fluids row
  8. Cycle pages with the > icon in the top right of the interface to Fluid Transfer Rate
  9. Set the value to 2000000000
  10. Close the interface
  11. Enjoy infinite fluid!
"},{"location":"guides/integrateddynamics/infinitefluidtransfer/#how-it-works","title":"How it works","text":"

The Fluid Interface makes the Sink accessible to the Integrated Dynamics network

The Fluid Exporter exports fluids on the network into the block it is attached to

The Logic Cable connecting the interface and exporter serves as the network

The Variable Card acts as a boolean true value to enable the Export All Fluids mode on the Fluid Exporter

Integrated Dynamics

"},{"location":"help/","title":"Help","text":""},{"location":"help/#all-the-mods-help","title":"All The Mods - Help","text":"

Documentation is currently work in progress, however check out F.A.Q in the mean time.

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"help/backups/","title":"Backups","text":""},{"location":"help/backups/#backups","title":"Backups","text":""},{"location":"help/backups/#what-should-i-backup","title":"What should I backup?","text":"
  1. options.txt
    • This contains most menu, volume, and video settings.
  2. keys.txt
    • This contains all your keybinds.
  3. Any configs you changed inside packInstall/configs
DON\u2019T copy and paste the entire configs folder

Only backup the config files that you have changed. Copying the entire folder can corrupt your install if the configs are from a different pack version.

  1. A backup of your world(s)
    • See below.
  2. Journeymap Waypoints (optional)
    • These are located in packinstall/journeymap/data/sp. Copy the folder with the world you want to backup.
"},{"location":"help/backups/#restoring-a-world-backup","title":"Restoring a World Backup","text":"

SimpleBackups is a mod included in the client version of ATM, but NOT included in the server version of ATM. You must add it yourself or use your server host\u2019s built-in options.

By default, it will save to packInstall/simplebackups with a zip file with your world\u2019s name. You can configure how often it does a backup at /configs/simplebackups-common.toml. Default Interval: Every 2 hours (120 minutes).

"},{"location":"help/backups/#atlauncher","title":"ATLauncher","text":"
  1. Close out of your modpack.
  2. Click Open Folder and open the simplebackups folder.
  3. Copy the zip file of the backup you want to restore to your saves folder.
  4. Go to your saves folder and delete the world you want to restore
  5. Open the zip file, then drag the folder inside, out to your saves folder. Delete the zip file

If the restore was unsuccessful, you may need to try an older backup before the issue occurred

"},{"location":"help/backups/#curseforge","title":"CurseForge","text":"
  1. Close completely out of the modpack.
  2. Right-click on the ATM icon in your CurseForge modpack screen and click Open Folder
  1. Open simplebackups
  1. Open the zip file that you want to restore. (They\u2019re labeled by the date created; the latest one is recommended.)
  2. Copy (Ctrl + C) the folder inside, then return to your saves folder.
  3. Back up your old world and delete it from this folder
  4. Paste (Ctrl + V) the backup into saves

If the restore was unsuccessful, you may need to try an older backup before the issue occurred

Simplebackups | CurseForge

"},{"location":"help/commands/","title":"Commands","text":""},{"location":"help/commands/#commands","title":"Commands","text":"Useful Minecraft Commands Corail Tombstone Spark FTBChunks FTBTeams/Party FTBQuests Admin Commands FTBQuests Edit Mode
/ftbquests editing_mode true\n
Crash Utilities Mahou Tsuaki"},{"location":"help/commands/#minecraft","title":"Minecraft","text":"Player CommandsAdmin Commands Teleport To Spawn
/spawn\n
Forge TPS Count
/forge tps\n
Kill/Remove Item Entities
/kill @e[type=minecraft:item]\n
Kill All Entities, Except Players
/kill @e[type=!minecraft:player]\n
Clear Inventory
/clear\n
"},{"location":"help/commands/#corail-tombstone","title":"Corail Tombstone","text":"Player CommandsAdmin Commands Knowledge GUI
/tbgui\n
Request Teleport To Player
/tbrequestteleport <name>\n
Teleport Binding (Like /sethome)
/tbbind set 1-5\n/tbbind teleport 1-5\n
Teleport to death position
/tbteleport death\n
Modify Knowledge Points
/tbknowledge\n
Restore Graves
/tbrestoreinventory\n
Get last graves coordinates
/tbshowlastgraves\n
Restore Graves From Player Backups
/tbrcovery\n
"},{"location":"help/commands/#spark","title":"Spark","text":"Player CommandsAdmin Commands Client Profiling
/sparkc profiler --timeout 30\n
Spark TPS Count
/spark tps\n
Server Ping
/spark ping\n
Server Profiling
/spark profiler --timeout 30\n
Server Health
/spark health\n/spark health --memory\n/spark health --network\n
Tick Monitoring
/spark tickmonitor\n/spark tickmonitor --threshold <percent>\n/spark tickmonitor --threshold-tick <milliseconds>\n/spark tickmonitor --without-gc\n
Spark Garbage Collection History
/spark gc\n
Garbage Collection Monitor
/spark gcmonitor\n
Spark Heap Summary
/spark heapsummary\n
Spark Heap Dump
/spark heapdump\n
Past Spark Activity/History
/spark activity\n

--only-ticks-over 20 argument for profiling will record only ticks that\u2019s over 20 ticks that\u2019s considered problematic

--thread * for profiling can help record all threads that Spark may not pick up

"},{"location":"help/commands/#ftbchunks","title":"FTBChunks","text":"Admin Commands Modifiy Claim Chunks Count
/ftbchunks admin extra_claim_chunks <player> <set/add> <amount>\n
Modify Force Loaded Chunks Count
/ftbchunks admin extra_force_load_chunks <player> <set/add> <amount>\n
Bypass Chunk Claims
/ftbchunks admin bypass_claims\n
Unload All Forced Loaded Chunks
/ftbchunks admin unload_everything\n
Unclaim All Chunks (All Team/Player Chunks)
/ftbchunks admin unclaim_everything\n
"},{"location":"help/commands/#ftbteamsparty","title":"FTBTeams/Party","text":""},{"location":"help/commands/#crash-utilities","title":"Crash Utilities","text":"Admin Commands Clear Entities (Must be enabled)
/cu callItemClear\n
Get world entities list
/cu entities list\n
Teleport Player (Even Offline) to spawn
/cu unstuck <name>\n
"},{"location":"help/commands/#mahou-tsuaki","title":"Mahou Tsuaki","text":"Player CommandsAdmin Commands Show/Hide Mahou Count
/showmahou\n
MahouSet Morgan Damage
/mahouset morgan @p 5000000\n
"},{"location":"help/configs/","title":"Configs","text":""},{"location":"help/configs/#configs","title":"Configs","text":"

Pack configs are usually located in the config/ folder, though others may be in your world/serverconfigs/ folder.

When editing configs, please make sure server / client is not running

For clients, it\u2019s safe to edit world/serverconfigs/ while not in the world and or restarting entire client.

"},{"location":"help/configs/#ftb","title":"FTB","text":""},{"location":"help/configs/#ftb-essentials","title":"FTB Essentials","text":"

Provide a couple of Bukkit / Spigot Essentials like commands. /home, /back, /tpa, /warp, etc. Commands can be enabled / disabled and configured, such as cool-downs and limits, even with FTBRanks.

Config: world/serverconfig/ftbessentials.snbt

"},{"location":"help/configs/#ftbranks","title":"FTBRanks","text":"

Includes ranks (hence name), is alike Group Manager, EssentialsEX, PermX, LuckyPerms, allowing you to setup custom / styled ranks for players that give additional command usages.

More information can be found on FTB Wiki: FTBRanks, FTB Essentials

Config: world/serverconfig/ftbranks/ranks.snbt

"},{"location":"help/configs/#no-fly-zone","title":"No Fly Zone","text":"

In ATM9, a new mod was introduced to prohibit flight in certain dimensions. This can be disabled.

Config: world/serverconfig/noflyzone.snbt

"},{"location":"help/configs/#faq","title":"F.A.Q","text":"Can you make ATM ores minable by quarry?

By design, fake players are not allowed to mine ATM ores. This ruins the purpose of the ore being obtained naturally, thus did not come with a config to change.

"},{"location":"help/faq/","title":"FAQ","text":""},{"location":"help/faq/#faq","title":"FAQ","text":"

This FAQ is put into 3 sections.

  • Technical
  • Servers
  • Gameplay

Context Keywords

  • Instance: The specific modpack or profile folder in question.
  • Arguments: Commands/Flags used with Java to help with performance (Most Garbage Collection).
  • Allocate: The amount of ram assigned to minecraft. By default it\u2019s always set to 4Gb or lower, and some modpack requires more.
"},{"location":"help/faq/#technical","title":"Technical","text":"
  • Failed To Authenticate.
  • Modpack Crashes (At Beginning).
  • World Crashing (Before / After).
  • Ticking Entity Or Block.
"},{"location":"help/faq/#failed-to-authenticate","title":"Failed To Authenticate","text":"Info

Authentication errors can be caused by numerous reasons. TL;TD here\u2019s some things you can try/check.

  • Re-authenticate your account by logging out and back within your launcher.
  • Restart launcher.
  • Restart Network (Unplugging router/modem (\u201cInternet Box(es)\u201d)).
  • Are you using or have Hamachi installed? If installed but not using, this could be a culprit.
  • IPv6 issues.
    • Setting this Java argument to force IPv4 -Djava.net.preferIPv4Stack=true
    • Disabling \u201cInternet Protocol Version 6 (TCP/IPv6)\u201d in/on Adapter Settings in Network and Sharing Center.
  • Flushing DNS > Command Prompt > ipconfig /flushdns
  • Firewall / DDoS protection (Modded MC can potentially flood network with packets considering to be an attack and blocking a specific server ip/inbound connections).
"},{"location":"help/faq/#modpack-crashes-at-beginning","title":"Modpack Crashes (At Beginning)","text":"Info

Crashes can be caused by numerous of reasons, which can be frustrating to figure out exactly why you\u2019re crashing.

  • Check within launcher/instance settings there\u2019s enough ram allocated. (8GB / 8,192MB). No more than (12GB / 12,288MB).
  • Check you\u2019re using the correct (not latest) version of Forge required for the pack, additionally Java
  • Update GPU drivers, and ensure you\u2019re using your Dedicated GPU.
    • If AMD,
      • Go to Official AMD Website and download / update GPU drivers.
    • If NVidia,
      • Go to NVidia Control Panel, Update Driver and go to 3D Settings.
      • Select Program Settings tab, and click Add
      • Sort By by Recently Used, and select Java.
  • Repair Installation, and or delete Minecraft / Forge libraries folder.
    • CurseForge: %USERPROFILE%\\curseforge\\minecraft\\Install
  • Repair Configs
    • Delete instance/config & instance/kubejsfolders.
    • Download the pack files (not server) from CurseForge
    • Inside the archived zip, copy the overrides/config and overrides/kubejs folder to your instance folder.
  • Repair / Re-Install Profile (Pack).
    • Not all launchers have this, therefor you may need to create another instance of the pack. Caution: If you delete current instance, you may delete your single player worlds! Make sure you back them up.
"},{"location":"help/faq/#world-crashing-before-after","title":"World Crashing (Before / After)","text":"Info

Crashing worlds can suck. Some of the most common, if non of the above fixed the issue.

  • Corrupted Configs
  • Corrupted Player Data
  • Corrupted Chunks
  • Ticking Entity Or Block
  • Mods that\u2019s being problematic (Bugs, or Additional mods you\u2019ve installed).

Some things you can try if,

  • Delete saves?/world/serverconfigs/ folder.
    • Note: If a world crash / fail to properly save, serverconfigs can potentially get corrupted.
  • Repair Configs
    • Delete instance/config & instance/kubejsfolders.
    • Download the pack files (not server) from CurseForge
    • Inside the archived zip, copy the overrides/config and overrides/kubejs folder to your instance folder.
  • Upload the most recent crash report prior to crashing within instance/crash-reports/ folder to MC Logs
    • MCLogs can sometimes point of the issue within the crash report.
"},{"location":"help/faq/#ticking-entity-or-block","title":"Ticking Entity Or Block","text":"Info

Ticking entities or blocks occurs by what they might\u2019ve interacted with, loaded / done incorrectly, or perhaps even an un/known discovered bug.

Lucky there\u2019s a trick you could do to possible fix this, if not manually.

  • Locate & Open saves?/world/serverconfig/forge-server.toml with any text editor.

    • For Block Entities: Set removeErroringBlockEntities to true.
    • For Ticking Entities: Set removeErroringEntities to true.
    • Load world, save /save-all & /stop, and set back false
      • Caution: This should NOT be left on for long as it can cause issues removing things if lag is created.
  • Upload the most recent crash report prior to crashing within instance/crash-reports/ folder to MC Logs.

    • It can help identify the source of the ticking entity, or at-least what\u2019s ticking and from what mod and the position.
    • If you don\u2019t have the location of this entity in crash report, or not sure of the exact player position that\u2019s near it,
      • Worst cast scenario, removing one of the mods involved in the crash, loading the world once and adding the mod back sometimes fixes the issue. Make sure you backup your world prior.
      • Submit crash report (MC Logs) link to the us via GitHub or Discord.
    • If have the location of this ticking entity, download an NBT editor: NBT Explorer or NBT Studio, as it will be handy.
      • Player
        • With NBT editor of choice, open your world/playerdata/<player-uuid>.dat file. You can use Minecraft UUID to figure out player UUID. Open up the player tree and then locate player X, Y, Z coordinates.
      • Coordinates
        • Use this Minecraft Coordinate Calculator and input the Block Position. You\u2019re then given your X, and Z Chunk Section, along with your Region information / file .mca.
        • With NBT editor, Open your the Region .mca file in world/regions, or world/entities if it\u2019s mod entity. Look for Chunk [-,-] @ World (X,Z) where World (X, Z) is the Chunk Section.
          • Note: Nether is in DIM-1 and End is in DIM1 folder. Other dimensions would be in the dimensions folder respectively.
        • After chunk is found, open the tree and look for / through entities for the crashing entity.
          • Note: You can also use the Search function above and search for the Value of the entity name.
          • Note #2: Searching will search within the last location / tree index your mouse clicked.
    • If all still fails, feel free to send us your log or crash report from MC Logs to our Github or Discord
"},{"location":"help/faq/#servers","title":"Servers","text":""},{"location":"help/faq/#gameplay","title":"Gameplay","text":"

Visit the FAQ of your specific pack to view it\u2019s FAQ!

"},{"location":"help/java/","title":"Java","text":""},{"location":"help/java/#java","title":"Java","text":""},{"location":"help/java/#java-versions","title":"Java Versions","text":"
  • Minecraft <= 1.15 | Java 8 | sudo apt install openjdk-8-jdk
  • Minecraft 1.16 | Java 8 OR Java 11 | sudo apt install openjdk-11-jdk
  • Minecraft 1.17 | Java 16 | sudo apt install openjdk-16-jdk
  • Minecraft 1.18+ | Java 17 | sudo apt install openjdk-17-jdk
Other Java Download Links

Amazon Corretto, Azul Zulu, or Oracle JDK

"},{"location":"help/java/#java-arguments","title":"Java Arguments","text":"

These can help both server and client with performance in,

  • Reducing Ram Usage. (GC will clean up more efficiently)
  • Reduced Lag Spikes. (GC will clean more frequently, reducing large lag spikes)
Java 8+ Arguments
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=32M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true\n
Java Arguments Explanation
  • -Xms, -Xmx
Places boundaries on the heap size to increase the predictability of garbage collection. The heap size is limited in replica servers so that even Full GCs do not trigger SIP retransmissions. -Xms sets the starting size to prevent pauses caused by heap expansion.
  • UseG1GC
Use the Garbage First (G1) Collector.
  • +ParallelRefProcEnabled
Optimizes the GC process to use multiple threads for weak reference checking. Not sure why this isn\u2019t default\u2026
  • MaxGCPauseMillis=200
This setting controls how much memory is used in between the Minimum and Maximum ranges specified for your New Generation. This is a \u201cgoal\u201d for how long you want your server to pause for collections. 200 is aiming for at most loss of 4 ticks. This will result in a short TPS drop, however the server can make up for this drop instantly, meaning it will have no meaningful impact to your TPS. 200ms is lower than players can recognize. In testing, having this value constrained to an even lower number results in G1 not recollecting memory fast enough and potentially running out of old gen triggering a Full collection. Just because this number is 200 does not mean every collection will be 200. It means it can use up to 200 if it really needs it, and we need to let it do its job when there is memory to collect.
  • +UnlockExperimentalVMOptions
Needed for some the below options
  • +DisableExplicitGC
Many plugins think they know how to control memory, and try to invoke garbage collection. Plugins that do this trigger a full garbage collection, triggering a massive lag spike. This flag disables plugins from trying to do this, protecting you from their bad code.
  • +AlwaysPreTouch
AlwaysPreTouch gets the memory setup and reserved at process start ensuring it is contiguous, improving the efficiency of it more. This improves the operating systems memory access speed. Mandatory to use Transparent Huge Pages.
  • G1NewSizePercent
These are the important ones. You now can specify percentages of an overall desired range for the new generation. With these settings, we tell G1 to not use its default 5% for new gen, and instead give it 40%! Minecraft has an extremely high a memory allocation rate, ranging to at least 800 Megabytes a second on a 30 player server! And this is mostly short-lived objects (Block Position).
  • G1MaxNewSizePercent
Percentage (0-100) of the heap size to use as default maximum young gen size.
  • G1HeapRegionSize
Default is auto calculated. SUPER important for Minecraft, especially 1.15, as with low memory situations, the default calculation will in most times be too low. Any memory allocation half of this size (4MB) will be treated as \u201cHumongous\u201d and promote straight to old generation and is harder to free. If you allow java to use the default, you will be destroyed with a significant chunk of your memory getting treated as Humongous.
  • G1ReservePercent
MC Memory allocation rate in up-to-date versions is really insane. We run the risk of a dreaded \u201cto-space exhaustion\u201d not having enough memory free to move data around. This ensures more memory is waiting to be used for this operation. Default is 10, so we are giving another 10 to it.
  • G1HeapWastePercent
Amount of space, expressed as a percentage of the heap size, that G1 is willing not to collect to avoid expensive GCs.
  • G1MixedGCCountTarget
Default is 8. Because we are aiming to collect slower, with less old gen usage, try to reclaim old gen memory faster to avoid running out of old.
  • InitiatingHeapOccupancyPercent
Percentage of the (entire) heap occupancy to start a concurrent GC cycle. GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap and not just one of the generations, including G1, use this option. A value of 0 denotes \u2018do constant GC cycles\u2019. The default value is 45.
  • G1MixedGCLiveThresholdPercent
Controls when to include regions in Mixed GC\u2019s in the Young GC collection, keeping Old Gen tidy without doing a normal Old Gen GC collection. When your memory is less than this percent, old gen won\u2019t even be included in \u2018mixed\u2019 collections. Mixed are not as heavy as a full old collection, so having small incremental cleanups of old keeps memory usage light. Default is 65 to 85 depending on Java Version, we are setting to 90 to ensure we reclaim garbage in old gen as fast as possible to retain as much free regions as we can.
  • G1RSetUpdatingPauseTimePercent
Default is 10% of time spent during pause updating RSets, reduce this to 5% to make more of it concurrent to reduce pause durations.
  • SurvivorRatio
Because we drastically reduced MaxTenuringThreshold, we will be reducing use of survivor space drastically. This frees up more regions to be used by Eden instead.
  • +PerfDisableSharedMem
Causes GC to write to file system which can cause major latency if disk IO is high \u2013 See JVM MMAP Pause Note: This argument can prevent VisualVM from detecting the Java process.
  • MaxTenuringThreshold
Minecraft has a really high allocation rate of memory. Of that memory, most is reclaimed in the eden generation. However, transient data will overflow into survivor. Initially played with completely removing Survivor and had decent results, but does result in transient data making its way to Old which is not good.Max Tenuring 1 ensures that we do not promote transient data to old generation, but anything that survives 2 passes of Garbage Collection is just going to be assumed as longer-lived. Doing this greatly reduces pause times in Young Collections as copying data up to 15 times in Survivor space for a tenured object really takes a lot of time for actually old memory. Ideally the GC engine would track average age for objects instead and tenure out data faster, but that is not how it works. Considering average GC rate is 10s to the upwards of minutes per young collection, this does not result in any \u2018garbage\u2019 being promoted, and just delays longer lived memory to be collected in Mixed GC\u2019s.
  • +UseLargePagesInMetaspace
For Large Pages \u2013 It\u2019s even more important to use -Xms = -Xmx! Large Pages needs to have all the memory specified for it, or you could end up without the gains. This memory will not be used by the OS anyway, so use it. Additionally, use these flags (Metaspace is Java 8 Only, don\u2019t use it for Java7):
  • +UseTransparentHugePages
Controversial feature but may be usable if you can not configure your host for real HugeTLBFS. Try adding, but it\u2019s extremely important you also have AlwaysPreTouch set. Otherwise, THP will likely hurt you. We have not measured how THP works for MC or its impact with AlwaysPreTouch, so this section is for the advanced users who want to experiment."},{"location":"help/lag/","title":"Lag / Profiling","text":""},{"location":"help/lag/#lag","title":"Lag","text":"

For identifying Lag sources/causes most of our packs have Spark and Observable in them by Default.

"},{"location":"help/lag/#spark-profiler","title":"Spark Profiler","text":"

Normal players also have access to the command /spark tps & /forge tps and that gives a general indication of any potential lag issues that might need investigating.

For Spark, players in SP worlds with cheats enabled, or Server OPs can use the command /spark profiler --timeout 180 to get a 3 minute snapshot of the server and anything that could be causing TPS issues. You can look at the URL returned by the mod to see an interactive online view of all server threads. Users can also use the command /spark profiler --only-ticks-over 100 --timeout 60, to identify intermittent lag spikes.

Note

For profiling client side FPS issues, use the sparkc command instead using same arguments above.

"},{"location":"help/lag/#observable","title":"Observable","text":"

Observable has the same permission requirements, but users need to set a keybind in their Keybinds settings to open the UI, from there click the profile TPS button and wait for it to complete, then depending on the mc version, you will either get a url, or an in-game table listing what blocks/entities are costing the most TPS, it will also visually highlight blocks with a spectrum color coding from Green to Red, with things colored in red generally being the worst for performance.

Observable is an in-game profiler that can be used by anyone (1.20+, enabled by default in ATM9 and must create a keybind). In order to use the \u201cVisit\u201d button on the web page, you must be op.

"},{"location":"help/lag/#crash-utilities-item-clear","title":"Crash Utilities (Item Clear)","text":"

By default, Crash Utilities comes with most of our packs, though one feature Item Clear is disabled. It\u2019s a very handy feature to have enabled with packs containing farms and automation to prevent massive entity leaks, which causes lag & crashes. This can keep your server entity count low for better performance.

To enable, locate and open world/serverconfigs/crashutilities-server.toml. Very top section, set enabled to true. The timer is the amount of time in minutes entities will be checked, followed by an Item Clear chat announcement when the entities goes over the maximum threshold.

When editing configs, please make sure server / client is not running

For clients, it\u2019s safe to edit world/serverconfigs/ while not in the world and or restarting entire client.

"},{"location":"help/lag/#useful-commands","title":"Useful Commands","text":"General Commands Kill Item Entities (Or Specific Entity)
/kill @e[type=minecraft:item]\n
Command may need to be executed more than once to clear all entities. Additionally, the Crash Utilities entities list command can be used to locate entities before they\u2019re cleared. Kill Everything, Except Players
/kill @e[type=!minecraft:player]\n
Spark Run Server Side Profiler (TPS Issues)
/spark profiler --timeout 30\n
Run Client Side Profiler (FPS/TPS Issues)
/sparkc profiler --timeout 30 \n

--only-ticks-over 20 argument will record only ticks that\u2019s over 20 that\u2019s considered problematic.

--thread * can help record all threads Spark may not pick up.

Crash Utilities Commands

Entities List
/cu entities list\n
Item Clear (Must Be Enabled)
/cu callItemClear\n
Teleport Player To Spawn (Even Offline Player(s))
/cu unstuck <name>\n
Open Player Inventory (Even Offline Player(s))
/cu inventory <name>\n
"},{"location":"help/server/","title":"Server","text":""},{"location":"help/server/#server","title":"Server","text":"

This guide will explain how to setup an AllTheMods server locally, or with a server host.

"},{"location":"help/server/#prerequisites","title":"Prerequisites","text":"
  • Server with at-least 8GB+ RAM (As required for most ATM packs).
  • CPU that\u2019s atleast 3.5Ghz of speed.
  • Specific Java version based on the pack Minecraft version.
"},{"location":"help/server/#installation","title":"Installation","text":"
  • Download modpack Server-Files from CurseForge.
  • Extract Server-Files to a folder.

If you\u2019ve a 3rd party Anti-Virus installed, exclude the folder the files will be extracted too, as files may get remove or corrupted after extracting.

"},{"location":"help/server/#java","title":"Java","text":"

If you have multiple Java versions installed, the default java -version will be used, which may not be the correct version based on the Minecraft version. There\u2019s 3 solutions,

  • Edit the server script, changing java to correct java binary path.
    • Ex: \"C:\\Program Files\\Java\\jre-17\\bin\\java.exe\" @user_jvm_args.txt ...
  • Remove old / add the correct java/bin path to System Environment Variables > Path
  • Linux, you can re-configure Java using sudo update-alternatives --config java
  • Uninstall all Java versions except the one being used.

If you\u2019ve installed Java, you may need to restart OS.

"},{"location":"help/server/#local-installation","title":"Local Installation","text":"
  • Extract Server-Files to a folder.
  • Window: Do not unzip files under OneDrive or any other cloud folder, as this can potentially remove / corrupt files.
  • Linux: Ensure server folder has read/write permission, and script has execute permission,
    • To avoid any read/write permission errors, install server under /home/<user>/ folder.
    • Run once: sudo chmod +x startserver.sh.
  • Starting Server:
    • Windows: Execute startserver.bat
    • Linux: Execute ./startserver.sh

After running, you\u2019re required to accept Minecraft Eula in the eula.txt file.

Make any changes necessary to server.properties, configs, and or world/serverconfigs, and run startserver.bat/sh again to start the server.

Warning

Many guides tell you to edit server-ip or server-port. In most cases you DO NOT need to edit these, especially server-ip. This can prevent your server from starting.

There\u2019s no startserver.bat/sh script?

Install Forge first,

  • java -jar forge-installer*.jar --installServer
  • You will then instead run.bat/sh to start server.
There\u2019s no run.bat/sh?

Expecting this is an older Forge version, you\u2019ll need to create a script that launches Forge.

run.bat/sh
java -Xms4G -Xmx8G -jar forge-*universal.jar\n
How to allocate RAM or add Arguments?

Allocating RAM and or adding Arguments are applied within usr_jvm_args.txt. Older versions of Forge will require adding arguments in the script file, if that file doesn\u2019t exist.

How To Import A World?

Upload world folder to server folder. Make sure the world folder is named world.

Performance Tips: Check out Lag / Profiling

"},{"location":"help/server/#server-host-installation","title":"Server Host Installation","text":"

Most server host has a one-click server installer you can use, otherwise

  • If possible, setup a fresh Forge server based on the current Forge version of the pack.
    • If host has no Forge installer, read Server Host Custom Jar
  • Upload extracted Server-Files to host, via FTP or STFP.
    • To connect to FTP/SFTP, you could use a client like FileZilla.
    • If there\u2019s no FTP/SFTP, you may be able to upload the Server-Files zip, and extract on server host via their online File Manager.
"},{"location":"help/server/#server-host-custom-jar","title":"Server Host Custom Jar","text":"

If server host requires a .jar file, later Forge versions cannot be ran directly. If older, you can upload and use the forge-*universal.jar as custom jar. Extract & Upload Server-Files to main server folder. Otherwise,

  • Download ServerStarter jar, then upload to main server folder. Use this as the custom jar.
  • Download pack Server-Files from CurseForge, extract, and upload ALL to main server folder.
  • Create a file named server-setup-config.yaml, and copy / paste the config example below.

Modifiy config for pack if necessary, specifically the mcVersion and loaderVersion, and place config in server root then start server as normal.

Config Example | ATM9

Highlighted lines are important to be configured

server-setup-config.yaml
# Version of the specs, only for internal usage if this format should ever change drastically\n_specver: 2\nmodpack:\n    name: ATM9\n    description: All The Mods 9\ninstall:\n    mcVersion: 1.20.1\n    loaderVersion: 47.2.19\n    installerUrl: \"https://files.minecraftforge.net/maven/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/forge-{{@mcversion@}}-{{@loaderversion@}}-installer.jar\"\n    installerArguments:\n        - \"--installServer\"\n    modpackFormat: zip\n    baseInstallPath: ~\n    checkFolder: true\n    installLoader: true\n    connectTimeout: 30\n    readTimeout: 30\nlaunch:\n    crashLimit: 10\n    maxRam: 8\n    minRam: 4\n    crashTimer: 60min\n    preJavaArgs: ~\n    startFile: \"forge-{{@mcversion@}}-{{@loaderversion@}}.jar\"\n    startCommand:\n        - \"@user_jvm_args.txt\"\n        - \"@libraries/net/minecraftforge/forge/{{@mcversion@}}-{{@loaderversion@}}/{{@os@}}_args.txt\"\n        - \"nogui\"\n    forcedJavaPath: ~\n    supportedJavaVersions: [17]\n
  • mcVersion: Minecraft Version
  • loaderVersion: Forge Version
  • supportedJavaVersions: Supported Java Version(s)
"},{"location":"help/server/#updating","title":"Updating","text":"

Updating ATM servers is pretty simple. There\u2019s 3 ways you can accomplish this.

BACKUP world before proceeding.

"},{"location":"help/server/#automatic","title":"Automatic","text":"
  1. If you have a server host with a modpack installer, usually you can do a one-click update within your control panel.
"},{"location":"help/server/#manually-2-methods","title":"Manually (2 methods)","text":"
  1. Backup any modified configs or kubejs scripts, if any, to be replaced later.

    • Download Server Files from CurseForge
    • Delete kubejs, defaultconfigs, mods, and config folder.
    • If server forge version is different, delete libraries folder, and copy over new startserver.bat/sh, & forge-installer.jar if exists.
    • Extract the deleted folders from Server Files into your server folder.
  2. Download Server Files from CurseForge.

    • Extract Server Files to a new folder.
    • Copy world, local folder, server.properties, & eula.txt to new server folder.
    • If journeymap folder exist, copy over aswell.
    • Copy over any modified server configs/kubejs scripts

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"help/server/amp/","title":"AMP Server Setup","text":"Warning

This guide is outdated as of 6/1/24. Guide will be updated to AMP\u2019s new UI.

"},{"location":"help/server/amp/#amp-install-guide","title":"AMP Install Guide","text":"

This is a guide for installing ATM9 (and possibly other packs) on CubeCoderz\u2019s AMP gameserver hosting software!

Info

The current version of AMP as of the creation of this guide is 2.5.0.4. As the software is updated, the exact location of settings may change.

Warning

This guide is currently hosted by the official ATM website/Discord. If found anywhere else please advise them to delete it and instead link to this official version.

This guide assumes:
  • You have fully installed the AMP software and have successfully gained access to the web based GUI. If you need help installing the base software please refer to the CubeCoderz Documentation.
  • You have already downloaded the latest version of the ATM Pack ServerFiles and have unzipped them into a folder.
"},{"location":"help/server/amp/#creating-a-new-instance","title":"Creating a New Instance.","text":"
  • Under Select Application, choose Minecraft Java Edition.
  • Under Friendly Name, pick a name to reference the server such as ATM9.
  • Under After Creation, pick Do Nothing.
Note

If you do not want the instance to start every time AMP is started, uncheck the Start Instance on Boot option. This is on by default.

  • Select Create Instance

"},{"location":"help/server/amp/#configuring-server-settings","title":"Configuring Server Settings","text":"
  • Choose Manage from the newly created instance
  • On the left menu, select Configuration and then Server Settings

Change the following:

  • Server type: Forge
  • Forge Version: Change to current Forge version.
    • For this example the current version is 47.2.20.
  • View Distance: 8
  • Simulation Distance: 6
  • Use Synchronous IO: off

  • On the left menu, select Security and Privacy

Change the following:

  • Require Session IP Stickiness: off

  • On the left menu, select Performance and Limits

Change the following:

  • Max View Distance: 8
  • Enable Sleep Mode: off
  • Stop Timeout: 60000
  • Backup Count Limit: 3

On the left menu, select Monitoring and Metrics

Change the following:

  • Console Scrollback Period: 120

On the left menu, select Java and Memory

Change the following:

  • Memory Limit (MB): Min: 6144. Max: 16384

Anything over 16384 requires changing the GC settings and is beyond the scope of this guide.

  • Additional java options: Paste in the server java arguments from the user_jvm.txt without the first two lines xmx or xms

-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1

  • Java Version: Java 17
Note

If Java 17 is not in the dropdown list, you need to close AMP completely, install Java 17 to the server, then restart AMP.

On the left menu, select Gameplay and Difficulty

Change the following:

  • Op permission level: 3:Kick/ban/op players
    • This is changed to keep OP users from running spark report from in-game. Spark reports should only be done from the server console directly.
  • Spawn Protection Radius: 1
  • Allow PvP: on
  • Allow Flight: on
  • Allow Command Blocks: on
  • Player idle timeout: 0
    • Can be done via mods instead or you can change this setting to your preference, but can lead to \u2018ghost players\u2019 on occasion stuck in the AMP menus as showing online after they have been kicked.
  • Use Whitelist: Don\u2019t change from default off
    • Highly recommended to use this feature, but only after the server is successfully running
  • Max tick Time: -1

"},{"location":"help/server/amp/#installing-server-forge","title":"Installing Server Forge","text":"

Click the Back arrow at the top of the left menu

Select Console from the left menu and then click Update from the middle screen.

Wait while the server downloads and installs the selected forge version.

This can take several minutes depending on your server specs and internet connection

When it finishes it should say The server installed successfully; if it does not please doublecheck the above settings and verify you have selected the appropriate Forge Version.

"},{"location":"help/server/amp/#importing-the-server-files","title":"Importing the Server Files","text":"

On the left menu, select File Manager

The easiest way to import the server files is to unzip the files and create a new zip

  • To remove the double-wrapping (zipping a folder instead of a group of files) of the files:
    • Extract the serverfiles you downloaded from CurseForge into a folder.
    • Go into the folder inside that folder and then select all the files and re-zip.

I recommend using 7zip as this is what I have used for testing

Make sure you save as .zip and not .7z

Drag the newly created zip file into the File Manager window. Once it finishes you may need to refresh the page to see the file in the file list.

Right click the .zip file in the list and chose Extract Here.

This may take several minutes depending on your server specs and storage speed.

Once it finishes you may need to refresh the page to see the newly extracted files populated in the list.

"},{"location":"help/server/amp/#starting-the-server","title":"Starting the Server","text":"

Select Console from the left menu and click Start.

  • Accept the EULA that pops up

The server will now start. This can take several minutes depending on your server specs and storage speed.

Note

Errors are normal and to be expected as long as it continues loading. Be patient as the first startup usually takes time while it creates all the needed files, configs, folders, etc.

You will know it is finished when the notification window in the bottom right disappears and the server says Dedicated server took XXX.XX seconds to load.

It is recommended after the first startup to stop the server, using the red Stop button at the top, and then start it again.

  • Try to connect to the server and verify operation
  • If you need to add server admin mods you would place them into the mods folder under File Manager while the server is stopped; you can edit files directly from within the file manager in AMP for making changes to the txt config files.

Only edit, add, or remove files WHILE THE SERVER IS STOPPED!

"},{"location":"help/server/amp/#changing-server-properties","title":"Changing Server Properties","text":"

All settings within server.properties are in independent tabs in the various settings in AMP and it is recreated every server startup.

CHANGES TO server.properties FILE WILL NEVER SAVE!

Changing Server Type

If you need to edit the world type for example, to run a Skyblock server, you would change it under Configuration > Server Settings > World Type.

All The Mods | GitHub | Discord | CubeCoders: AMP

"},{"location":"legacy/","title":"All The Mods - Legacy","text":""},{"location":"legacy/#all-the-mods-legacy","title":"All The Mods - Legacy","text":"

Legacy (Old) ATM packs that\u2019s no longer being maintained.

All The Mods | GitHub | Discord | Akliz Server Hosting

"},{"location":"legacy/atm0/","title":"ATM0","text":""},{"location":"legacy/atm0/#atm0","title":"ATM0","text":"

All The Mods 0 | CurseForge | GitHub

"},{"location":"legacy/atm1/","title":"ATM1","text":""},{"location":"legacy/atm1/#atm1","title":"ATM1","text":"

All The Mods 1 | CurseForge | GitHub

"},{"location":"legacy/atm2/","title":"ATM2","text":""},{"location":"legacy/atm2/#atm2","title":"ATM2","text":"

All The Mods 2 | CurseForge | GitHub

"},{"location":"legacy/atm3/","title":"All The Mods 3","text":""},{"location":"legacy/atm3/#all-the-mods-3","title":"All The Mods 3","text":"

All The Mods 3 | CurseForge | GitHub

"},{"location":"legacy/atm3/expert/","title":"All The Mods 3 - Expert","text":""},{"location":"legacy/atm3/expert/#all-the-mods-3-expert","title":"All The Mods 3 - Expert","text":"

All The Mods 3 - Expert | CurseForge | GitHub

"},{"location":"legacy/atm3/remix/","title":"All The Mods 3 - Remix","text":""},{"location":"legacy/atm3/remix/#all-the-mods-3-remix","title":"All The Mods 3 - Remix","text":"

All The Mods 3 - Remix | CurseForge | GitHub

"},{"location":"legacy/atm4/","title":"All The Mods 4","text":""},{"location":"legacy/atm4/#all-the-mods-4","title":"All The Mods 4","text":"

All The Mods 4 | CurseForge | GitHub

"},{"location":"legacy/atm5/","title":"All The Mods 5","text":""},{"location":"legacy/atm5/#all-the-mods-5","title":"All The Mods 5","text":"

All The Mods 5 | CurseForge | GitHub

"},{"location":"legacy/atmslop/","title":"All The Mods - Slice Of Pie","text":""},{"location":"legacy/atmslop/#all-the-mods-slice-of-pie","title":"All The Mods - Slice Of Pie","text":"

All The Mods - Slice Of Pie | CurseForge | GitHub

"},{"location":"legacy/atmslop2/","title":"All The Mods - Slice Of Pice 2","text":""},{"location":"legacy/atmslop2/#all-the-mods-slice-of-pice-2","title":"All The Mods - Slice Of Pice 2","text":"

All The Mods - Slice Of Pie 2 | CurseForge | GitHub

"},{"location":"misc/","title":"Miscellaneous","text":""},{"location":"misc/#miscellaneous","title":"Miscellaneous","text":"

Content that doesn\u2019t fit in other places, or have similarities with all packs.

All The Mods | GitHub | Discord | Akliz Server Hosting

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..d8a9308 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,498 @@ + + + + https://allthemods.github.io/alltheguides/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/404/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/alltheteam/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/allthetimeline/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/contributors/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/feedback/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/about/license/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/apotheosis/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/astralsorcery/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/bees/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/draconicevolution/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/enchanting/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/envtech/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/faq/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/iceandfire/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mekanism/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/pedestals/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/silentgear/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/woot/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/enchanting/applicator/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/enchanting/botania/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/enchanting/mahou/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/book/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/caliburn/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/durabilityexchange/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/mana/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/mahou/morgan/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/sky/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/sky/dragons/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm6/sky/faq/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm7/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm7/lite/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm7/sky/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm8/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm8/apotheosis/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm8/mekanism/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm8/mysticalagriculture/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/allthemodium/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/apotheosis/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/extremereactors/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/faq/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/generatorgalore/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/gregtech/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/mahoutsukai/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/mekanism/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/mobgrindingutils/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/mysticalagriculture/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/powah/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9/productivebees/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9tts/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atm9tts/faq/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atmg/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atmg/gravitas2/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atms/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/atmvb/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/blog/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/blog/posts/new/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/biggerreactors/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/kaimonickguides/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/translations/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/admonition/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/annotations/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/buttons/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/code/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/contenttabs/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/datatables/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/diagrams/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/formatting/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/contributing/examples/imagery/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/integrateddynamics/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/guides/integrateddynamics/infinitefluidtransfer/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/backups/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/commands/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/configs/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/faq/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/java/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/lag/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/server/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/help/server/amp/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm0/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm1/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm2/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm3/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm3/expert/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm3/remix/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm4/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atm5/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atmslop/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/legacy/atmslop2/ + 2024-07-11 + daily + + + https://allthemods.github.io/alltheguides/misc/ + 2024-07-11 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000..9f68816 Binary files /dev/null and b/sitemap.xml.gz differ

Resourceful Bees | CurseForge