From 092d50168bbb215ddd78eabbb61b3f2304e8cb13 Mon Sep 17 00:00:00 2001
From: kross <135918757+krossgg@users.noreply.github.com>
Date: Wed, 18 Dec 2024 17:41:05 -0500
Subject: [PATCH] Move docs to main repo (#2583)
---
.github/workflows/deploy-pages.yml | 47 +++
docs/.gitignore | 8 +
docs/CONTRIBUTING.md | 144 +++++++
docs/LICENSE | 121 ++++++
docs/README.md | 24 ++
docs/content/.pages | 5 +
docs/content/Development/.pages | 7 +
.../content/Development/External-Resources.md | 67 +++
docs/content/Development/FAQ.md | 21 +
.../General-Topics/Capabilities.md | 20 +
.../Energy-Fluid-Item-Storage.md | 127 ++++++
.../Development/General-Topics/Global-Data.md | 41 ++
.../Handling-Fluid-Bucket-Size.md | 15 +
.../General-Topics/Optimization.md | 8 +
.../General-Topics/Ore-Generation.md | 116 ++++++
.../Overclocking-And-Parallel-Logic.md | 80 ++++
.../General-Topics/Tick-Updates.md | 171 ++++++++
docs/content/Development/Glossary.md | 62 +++
docs/content/Development/SyncData/.pages | 5 +
.../Development/SyncData/Annotations/.pages | 6 +
.../SyncData/Annotations/DescSynced.md | 6 +
.../SyncData/Annotations/Persisted.md | 6 +
.../SyncData/Annotations/RequireRerender.md | 6 +
.../SyncData/Annotations/UpdateListener.md | 6 +
.../Development/SyncData/Using-SyncData.md | 50 +++
docs/content/Development/SyncData/index.md | 12 +
docs/content/Development/index.md | 22 +
docs/content/Gameplay/Ore-Generation.md | 380 ++++++++++++++++++
docs/content/Gameplay/Steam/Bronze.md | 13 +
.../Gameplay/Steam/Steam-Generation.md | 49 +++
.../Gameplay/Steam/assets/bronze_recipe.png | Bin 0 -> 1571 bytes
.../Gameplay/Steam/assets/ingot_crushed.png | Bin 0 -> 3426 bytes
.../Gameplay/Steam/assets/p_water_pump.png | Bin 0 -> 49042 bytes
docs/content/Gameplay/Steam/index.md | 17 +
docs/content/Gameplay/index.md | 6 +
docs/content/Modpacks/.pages | 7 +
docs/content/Modpacks/Beyond-The-Docs.md | 39 ++
docs/content/Modpacks/Changes/v1.1.0.md | 28 ++
docs/content/Modpacks/Changes/v1.2.1.md | 58 +++
docs/content/Modpacks/Examples/Alternator.md | 72 ++++
docs/content/Modpacks/Examples/Greenhouse.md | 218 ++++++++++
.../Modpacks/Examples/Ore-Processing-Plant.md | 62 +++
.../Modpacks/Examples/Parallel-Hatch-Part.md | 36 ++
.../Modpacks/Examples/Reducing-Duration.md | 27 ++
.../Modpacks/Examples/Removing-Ore-Piles.md | 23 ++
docs/content/Modpacks/Examples/index.md | 8 +
.../01-Material-Creation.md | 130 ++++++
.../02-Element-Creation.md | 29 ++
.../Materials-and-Elements/Material-Flags.md | 67 +++
.../Material-Icon-Sets.md | 50 +++
.../Material-Properties.md | 45 +++
.../Modifying-Existing-Materials.md | 84 ++++
...Prefixes-and-the-power-of-.setIgnored().md | 46 +++
.../The-ChemicalHelper-class.md | 44 ++
.../Modpacks/Materials-and-Elements/index.md | 14 +
.../Ore-Generation/01-Customizing-Veins.md | 143 +++++++
.../Modpacks/Ore-Generation/02-Generators.md | 137 +++++++
.../Ore-Generation/03-Adding-Stone-Types.md | 74 ++++
.../04-Layers-and-Dimensions.md | 35 ++
.../Ore-Generation/Bedrock-Fluid-Veins.md | 27 ++
docs/content/Modpacks/Ore-Generation/index.md | 20 +
.../Adding-and-Removing-Recipes.md | 143 +++++++
.../Modpacks/Other-Topics/Custom-Coils.md | 23 ++
.../Modpacks/Other-Topics/Custom-Machines.md | 134 ++++++
.../Other-Topics/Custom-Recipe-Types.md | 41 ++
.../Modpacks/Other-Topics/LDLib-UI-Editor.md | 10 +
.../Modifying-Crafting-Components.md | 150 +++++++
docs/content/Modpacks/Other-Topics/index.md | 8 +
docs/content/Modpacks/index.md | 38 ++
docs/content/assets/favicon.png | Bin 0 -> 839 bytes
docs/content/assets/logo.png | Bin 0 -> 700 bytes
docs/content/index.md | 28 ++
docs/content/stylesheets/extra.css | 48 +++
docs/mkdocs.yml | 80 ++++
docs/requirements.txt | 2 +
75 files changed, 3896 insertions(+)
create mode 100644 .github/workflows/deploy-pages.yml
create mode 100644 docs/.gitignore
create mode 100644 docs/CONTRIBUTING.md
create mode 100644 docs/LICENSE
create mode 100644 docs/README.md
create mode 100644 docs/content/.pages
create mode 100644 docs/content/Development/.pages
create mode 100644 docs/content/Development/External-Resources.md
create mode 100644 docs/content/Development/FAQ.md
create mode 100644 docs/content/Development/General-Topics/Capabilities.md
create mode 100644 docs/content/Development/General-Topics/Energy-Fluid-Item-Storage.md
create mode 100644 docs/content/Development/General-Topics/Global-Data.md
create mode 100644 docs/content/Development/General-Topics/Handling-Fluid-Bucket-Size.md
create mode 100644 docs/content/Development/General-Topics/Optimization.md
create mode 100644 docs/content/Development/General-Topics/Ore-Generation.md
create mode 100644 docs/content/Development/General-Topics/Overclocking-And-Parallel-Logic.md
create mode 100644 docs/content/Development/General-Topics/Tick-Updates.md
create mode 100644 docs/content/Development/Glossary.md
create mode 100644 docs/content/Development/SyncData/.pages
create mode 100644 docs/content/Development/SyncData/Annotations/.pages
create mode 100644 docs/content/Development/SyncData/Annotations/DescSynced.md
create mode 100644 docs/content/Development/SyncData/Annotations/Persisted.md
create mode 100644 docs/content/Development/SyncData/Annotations/RequireRerender.md
create mode 100644 docs/content/Development/SyncData/Annotations/UpdateListener.md
create mode 100644 docs/content/Development/SyncData/Using-SyncData.md
create mode 100644 docs/content/Development/SyncData/index.md
create mode 100644 docs/content/Development/index.md
create mode 100644 docs/content/Gameplay/Ore-Generation.md
create mode 100644 docs/content/Gameplay/Steam/Bronze.md
create mode 100644 docs/content/Gameplay/Steam/Steam-Generation.md
create mode 100644 docs/content/Gameplay/Steam/assets/bronze_recipe.png
create mode 100644 docs/content/Gameplay/Steam/assets/ingot_crushed.png
create mode 100644 docs/content/Gameplay/Steam/assets/p_water_pump.png
create mode 100644 docs/content/Gameplay/Steam/index.md
create mode 100644 docs/content/Gameplay/index.md
create mode 100644 docs/content/Modpacks/.pages
create mode 100644 docs/content/Modpacks/Beyond-The-Docs.md
create mode 100644 docs/content/Modpacks/Changes/v1.1.0.md
create mode 100644 docs/content/Modpacks/Changes/v1.2.1.md
create mode 100644 docs/content/Modpacks/Examples/Alternator.md
create mode 100644 docs/content/Modpacks/Examples/Greenhouse.md
create mode 100644 docs/content/Modpacks/Examples/Ore-Processing-Plant.md
create mode 100644 docs/content/Modpacks/Examples/Parallel-Hatch-Part.md
create mode 100644 docs/content/Modpacks/Examples/Reducing-Duration.md
create mode 100644 docs/content/Modpacks/Examples/Removing-Ore-Piles.md
create mode 100644 docs/content/Modpacks/Examples/index.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/01-Material-Creation.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/02-Element-Creation.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/Material-Flags.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/Material-Icon-Sets.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/Material-Properties.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/Modifying-Existing-Materials.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/TagPrefixes-and-the-power-of-.setIgnored().md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/The-ChemicalHelper-class.md
create mode 100644 docs/content/Modpacks/Materials-and-Elements/index.md
create mode 100644 docs/content/Modpacks/Ore-Generation/01-Customizing-Veins.md
create mode 100644 docs/content/Modpacks/Ore-Generation/02-Generators.md
create mode 100644 docs/content/Modpacks/Ore-Generation/03-Adding-Stone-Types.md
create mode 100644 docs/content/Modpacks/Ore-Generation/04-Layers-and-Dimensions.md
create mode 100644 docs/content/Modpacks/Ore-Generation/Bedrock-Fluid-Veins.md
create mode 100644 docs/content/Modpacks/Ore-Generation/index.md
create mode 100644 docs/content/Modpacks/Other-Topics/Adding-and-Removing-Recipes.md
create mode 100644 docs/content/Modpacks/Other-Topics/Custom-Coils.md
create mode 100644 docs/content/Modpacks/Other-Topics/Custom-Machines.md
create mode 100644 docs/content/Modpacks/Other-Topics/Custom-Recipe-Types.md
create mode 100644 docs/content/Modpacks/Other-Topics/LDLib-UI-Editor.md
create mode 100644 docs/content/Modpacks/Other-Topics/Modifying-Crafting-Components.md
create mode 100644 docs/content/Modpacks/Other-Topics/index.md
create mode 100644 docs/content/Modpacks/index.md
create mode 100644 docs/content/assets/favicon.png
create mode 100644 docs/content/assets/logo.png
create mode 100644 docs/content/index.md
create mode 100644 docs/content/stylesheets/extra.css
create mode 100644 docs/mkdocs.yml
create mode 100644 docs/requirements.txt
diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml
new file mode 100644
index 0000000000..315c9cceac
--- /dev/null
+++ b/.github/workflows/deploy-pages.yml
@@ -0,0 +1,47 @@
+name: Publish docs via GitHub Pages
+on:
+ workflow_dispatch:
+ push:
+ branches: [1.20.1]
+ paths: ['docs/**']
+
+jobs:
+ build:
+ name: build docs
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: './docs'
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: '1.20.1'
+ sparse-checkout: './docs'
+ - uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+ cache: 'pip'
+ - run: pip install -r ./requirements.txt
+ - uses: actions/cache@v4
+ with:
+ key: 'mkdocs-cache'
+ path: './docs/.cache'
+ - name: Build static files
+ id: mkdocs
+ run: mkdocs build
+ - name: Upload pages as artifact
+ id: artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: './docs/site/'
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ steps:
+ - name: Deploy Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000000..24c33be7ea
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,8 @@
+env/
+venv/
+.env
+.venv
+[Ii]nclude
+[Ll]ib
+[Ss]cripts
+site
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 0000000000..b9cb088af9
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,144 @@
+# Contributor Info / Styleguide
+
+For consistency, please follow the following styleguide when submitting PRs.
+
+
+## Filenames & Basic Page Structure
+
+The file structure and basic page layout must follow these conventions:
+
+- For each section, create a directory with a short, descriptive name in `Title Case`.
+- File names should only contain `A-Z`, `a-z`, `0-9`, `-` and `_` (no spaces).
+- Directory names must use dashes (`-`) instead of spaces.
+- If you want to add a short description of what a section is about, include an `index.md` in its directory.
+- Every page of the docs must include a Markdown front matter block, containing _at least_ its title, followed by
+ two empty lines.
+- Every page must start with a level-1 heading. No other level-1 headings may be added.
+
+Note that the page name/title must be as short and descriptive as possible, as it's displayed in the navigation area.
+You can, however, choose a longer version for the page _header_:
+
+```markdown
+---
+title: My Page Name
+---
+
+
+# This is my Custom Page Header!
+
+Page content here...
+```
+
+Contrary to filenames, both the title and header are **not** limited to specific characters.
+
+
+## Empty Lines
+
+Please consider the following conventions for empty lines:
+
+- At least two empty lines before each heading
+- Exactly one line after each heading
+- Separate each "element" of a page by an empty line inbetween
+ (code blocks, lists, [admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/), etc.)
+
+
+## Formatting
+
+Please use the following formatting rules for standard markdown:
+
+- Use double asterisks for bold text (`**bold**`) and underscores for italics (`_italics_`)
+- Each code block must include a language whenever possible, so that syntax highlighting is applied correctly
+
+
+## Index Pages
+
+Only use index pages for a short description of what the current section is about.
+
+Do not include any important documentation on index pages!
+You may link to certain relevant pages (either inside the current section, or in other sections) though.
+
+
+## Admonitions
+
+Use [admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/) in the following situations:
+
+- If you want to provide potentially useful, additional info about a feature, use an `info` admonition.
+- For "see also" references, use an `info inline end` admonition.
+- For tips / recommendations on _when_ or _how_ to use a feature, use he `tip` admonition type.
+ - For general notes on _when_ or _how_ to use a specific feature (in development related docs), use the `note` type.
+- For warning about possible bugs or unwanted behavior, use the `warning` type.
+- If a feature may result in destructive actions in certain scenarios, use the `danger` type.
+- For providing code examples, use the `example` type.
+ - **Always** provide a title for code examples, even if it's simply "Example usage".
+ - Use collapsible blocks (`??? example "my example title"` instead of `!!!`) for code examples where possible.
+ _In some situations this might not be as useful as using a non-collapsible block. Just fall back to `!!!` in these cases._
+- For pages or sections that are not documented yet, use `!!! failure "Not yet documented"`
+- For links, use the (custom) `link` type.
+
+We suggest adding an empty line after the title for consistency, like in the following example.
+It is **strongly recommended** to include a custom, descriptive title for your admonition, if possible.
+
+
+```markdown
+!!! note "My descriptive title"
+
+ This is my note's content
+```
+
+
+### Admonitions for experimental or not-yet-merged features
+
+If a feature is either not yet merged or simply not stable yet, please add a title-only `warning inline end` before its
+description, as shown below.
+
+For additional info (e.g. which branch the feature is currently in), add a `
` tag in the title, followed by the
+additional info in italics.
+If your additional information needs to be more detailed than that, consider using a collapsible admonition instead.
+
+```markdown
+!!! warning inline end "Not merged yet.
_Branch: `my-branch-name`_"
+
+Paragraph containing the feature's description...
+```
+
+Here are some good examples you could use as the first line of your warning:
+
+- Experimental
+- Unstable
+- Not yet implemented
+- Not merged yet
+
+
+## Annotations
+
+Use [annotations](https://squidfunk.github.io/mkdocs-material/reference/annotations/) in the following situations:
+
+- Explanatory comments in code examples (preferred over including these as an actual comment)
+- Additional explanations to a specific aspect of your documented feature
+- An explanation for a technical term used in your documentation
+
+There must be an empty line before the first annotation or they won't work properly.
+
+Also add an empty line between each annotation if at least one in the current block is longer than a single line.
+In that case, add two empty lines after the end of the annotation list.
+
+Annotations must be numbered starting at 1 **for each block** of consecutive annotations.
+If they are separated by another element, you need to start at 1 again for the next block of annotations:
+
+
+~~~markdown
+```java
+someVar.someMethod(); // (1)
+return someVar; // (2)
+```
+
+1. annotation 1 for the first code block
+2. annotation 2 for the first code block
+
+
+```java
+someVar.anotherMethod(); // (1)
+```
+
+1. annotation 1 for the second code block
+~~~
diff --git a/docs/LICENSE b/docs/LICENSE
new file mode 100644
index 0000000000..0e259d42c9
--- /dev/null
+++ b/docs/LICENSE
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000000..a023b8a3ee
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,24 @@
+# GregTech CEu Modern Documentation
+
+This documentation project is built using [MkDocs](https://www.mkdocs.org/#).
+
+For an automatically updating live preview in your browser, run `mkdocs serve`
+
+
+## Installing Required Dependencies
+
+To install the required dependencies, please run `pip install -r requirements.txt`
+
+
+## Used MkDocs Plugins
+
+The following plugins for MkDocs are being used:
+
+- https://squidfunk.github.io/mkdocs-material/
+- https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin
+
+## Contributing
+
+When contributing to this project, please refer to the [Styleguide](./CONTRIBUTING.md).
+I know it's kinda long, but it will help in keeping the documentation consistent. You will also find examples of
+when to use specific features of mkdocs and mkdocs-material.
diff --git a/docs/content/.pages b/docs/content/.pages
new file mode 100644
index 0000000000..bb2adb55ff
--- /dev/null
+++ b/docs/content/.pages
@@ -0,0 +1,5 @@
+nav:
+ - 'Home': 'index.md'
+ - 'Gameplay'
+ - 'Modpack Authors': Modpacks
+ - 'Developers': 'Development'
\ No newline at end of file
diff --git a/docs/content/Development/.pages b/docs/content/Development/.pages
new file mode 100644
index 0000000000..af6db0ddec
--- /dev/null
+++ b/docs/content/Development/.pages
@@ -0,0 +1,7 @@
+nav:
+ - index.md
+ - Glossary.md
+ - External-Resources.md
+ - FAQ.md
+ - General-Topics
+ - ...
\ No newline at end of file
diff --git a/docs/content/Development/External-Resources.md b/docs/content/Development/External-Resources.md
new file mode 100644
index 0000000000..434eaf4d35
--- /dev/null
+++ b/docs/content/Development/External-Resources.md
@@ -0,0 +1,67 @@
+---
+icon: "material/link-box-variant"
+title: "External Resources"
+---
+
+
+# :material-link-box-variant: External Resources
+
+This page contains links to external documentation that may be useful for several topics regarding development, as well
+as other resources you might find helpful.
+
+
+## General Modding Docs
+
+!!! link "Official Forge / NeoForge Docs"
+ - [Forge-Wiki](https://docs.minecraftforge.net/en/1.20.x/)
+ - [NeoForge-Wiki](https://docs.neoforged.net/)
+
+!!! link "Official Fabric Docs"
+ [Fabric-Wiki :material-arrow-right: Mod Developer Docs](https://fabricmc.net/wiki/tutorial:start)
+
+!!! link "Other Modding Docs"
+ - [Forge Community-Wiki](https://forge.gemwire.uk/wiki/Main_Page)
+ - [MCJty's Modding Wiki](https://www.mcjty.eu/docs/intro)
+
+
+## LDLib
+
+LDLib is the main library we're using for GTCEu-Modern.
+
+!!! link "LDLib Docs"
+ [:material-github: LDLib-Architectury :material-arrow-right: Wiki](https://github.com/Low-Drag-MC/LDLib-Architectury/wiki)
+
+
+## Mixins
+
+!!! link "Overview on using Mixins"
+ [Fabric-Wiki :material-arrow-right: Mixins](https://fabricmc.net/wiki/tutorial:mixin_introduction)
+
+ This is a great resource for getting started on how to use mixins, as well as a good quick reference if you're
+ looking for how to do something specific.
+
+ Note that this is not exclusive to Fabric, but applies for all platforms instead.
+
+!!! link "Official Docs"
+ [:material-github: Mixin :material-arrow-right: Wiki](https://github.com/SpongePowered/Mixin/wiki)
+
+ A more detailed technical documentation on mixins.
+
+
+## DFU (DataFixerUpper)
+
+!!! link "Unofficial Documentation"
+ [:material-github: Documented DataFixerUpper](https://github.com/kvverti/Documented-DataFixerUpper)
+
+ Unofficial documentation for Mojang's DataFixerUpper library.
+
+
+## Registrate & Architectury
+
+!!! link "Using Registrate"
+ [:material-github: Registrate](https://github.com/tterrag1098/Registrate)
+
+!!! link "Architectury Gradle Plugin"
+ [Architectury-Wiki :material-arrow-right: Gradle Plugin](https://docs.architectury.dev/plugin/introduction)
+
+ Note that we're only using Architectury's build system, not the library itself.
\ No newline at end of file
diff --git a/docs/content/Development/FAQ.md b/docs/content/Development/FAQ.md
new file mode 100644
index 0000000000..519082ed9d
--- /dev/null
+++ b/docs/content/Development/FAQ.md
@@ -0,0 +1,21 @@
+---
+icon: "material/frequently-asked-questions"
+title: "FAQ"
+---
+
+
+# :material-frequently-asked-questions: Frequently Asked Questions
+
+
+## How to disable Shimmer's colored light monitor
+
+Shimmer (one of our soft-dependencies) displays information about colored lights in development environments by default.
+You can turn it off using the command `/shimmer coloredLightMonitor` ingame.
+
+Alternatively, if you want to disable it by default, put this in your KubeJS client scripts:
+
+```js
+// Disable Shimmer's colored light monitor:
+let LightCounterRender = Java.loadClass("com.lowdragmc.shimmer.client.light.LightCounter$Render")
+LightCounterRender.enable = false
+```
diff --git a/docs/content/Development/General-Topics/Capabilities.md b/docs/content/Development/General-Topics/Capabilities.md
new file mode 100644
index 0000000000..07de9ae565
--- /dev/null
+++ b/docs/content/Development/General-Topics/Capabilities.md
@@ -0,0 +1,20 @@
+---
+title: Capabilities
+---
+
+
+# How to access Capabilities of blocks and items
+
+Fabric doesn't have a capability system like Forge does, but you can use several utility methods instead:
+
+```java
+FluidTransferHelper.getFluidTransfer(...);
+ItemTransferHelper.getItemTransfer(...);
+GTCapabilityHelper.getRecipeLogic(...)
+GTCapabilityHelper.getControllable(...)
+GTCapabilityHelper.getCoverable(...)
+GTCapabilityHelper.getToolable(...)
+GTCapabilityHelper.getWorkable(...)
+GTCapabilityHelper.getElectricItem(...)
+GTCapabilityHelper.getEnergyContainer(...)
+```
diff --git a/docs/content/Development/General-Topics/Energy-Fluid-Item-Storage.md b/docs/content/Development/General-Topics/Energy-Fluid-Item-Storage.md
new file mode 100644
index 0000000000..b478d3a3f1
--- /dev/null
+++ b/docs/content/Development/General-Topics/Energy-Fluid-Item-Storage.md
@@ -0,0 +1,127 @@
+---
+title: Item/Fluid/Energy Storage
+---
+
+
+# How to add an Item Inventory / Fluid Storage / Energy Container
+
+!!! note
+
+ In general, these containers should be created as `final` fields (that's what we need for the
+ [SyncData](../SyncData/index.md) system).
+ Set their base arguments in the constructor (you can pass args for subclasses to modify).
+
+
+## Implementations for Recipe Processing and adding Capabilities
+
+You can create these containers via one of the following classes:
+
+- `NotifiableItemStackHandler`
+- `NotifiableFluidTank`
+- `NotifiableEnergyContainer`
+
+In general, you should prefer these classes over other implementations if possible, as they notify all listeners
+of internal changes to improve performance.
+
+**IO constructor parameters:**
+
+- `handlerIO`: Whether the container is regarded as input or output during recipe processing
+- `capabilityIO`: Whether the player can use hoppers, pipes, cables, etc. to interact with the storage
+
+
+## General-Purpose implementations
+
+If you don't need to use the storage for recipe processing and/or providing capabilities, you can just use one of the
+following classes, as they are more lightweight:
+
+- `ItemStackTransfer`
+- `FluidStorage`
+
+
+## Custom implementations
+
+In some cases, you might need to create a custom implementation for either of these containers.
+To do so, use either of the following interfaces:
+
+- `IItemTransfer`
+- `IFluidTransfer`
+- `IEnergyContainer`
+
+
+## Specialized proxy implementations
+
+In case you have special requirements to your containers, you may be able to use one of these implementations in
+conjunction with one or more regular containers.
+They generally act as a proxy to the underlying container(s), while also handling these requirements.
+
+
+### Proxying multiple containers
+
+- `ItemTransferList`
+- `FluidTransferList`
+- `EnergyContainerList`
+
+
+### IO-specific container proxies
+
+For proxying multiple containers, limited to a specific IO direction.
+
+- `IOItemTransferList`
+- `IOFluidTransferList`
+
+
+### Rate-Limited proxies
+
+!!! warning inline end "Not merged yet
_Branch: `mi-ender-link`_"
+
+If you need to proxy any item or fluid container that needs to be rate limited for insertion and extraction, you can
+use either of the following classes:
+
+- `LimitingItemTransferProxy`
+- `LimitingFluidTransferProxy`
+
+The transfer limit passed as a constructor parameter will not renew automatically. Your container will therefore stop
+transferring anything once this limit is reached.
+
+If you want to make this a rate limit instead, you will have to schedule a task that regularly resets the transfer
+limit to the maximum value for your task's interval:
+
+??? example "Example Usage"
+
+ ```java
+ public class MyCover extends CoverBehavior {
+ private LimitingFluidTransferProxy transferProxy;
+ private ConditionalSubscriptionHandler rateLimitSubscription;
+
+ public MyCover(IFluidTransfer myFluidTransfer) {
+ super(/* ... */);
+
+ transferProxy = new LimitingFluidTransferProxy(
+ myFluidTransfer,
+ 0L // Initial limit of 0, will be updated regularly in isRateLimitRefreshActive()
+ );
+ rateLimitSubscription = new ConditionalSubscriptionHandler(
+ this,
+ this::resetTransferRateLimit,
+ this::isRateLimitRefreshActive
+ );
+ }
+
+ @Override
+ public void onLoad() {
+ super.onLoad();
+ rateLimitSubscription.initialize(coverHolder.getLevel());
+ }
+
+ private void resetTransferRateLimit() {
+ if (transferProxy == null)
+ return;
+
+ transferProxy.setRemainingTransfer(transferRate.getMilliBuckets() * 20);
+ }
+
+ private boolean isRateLimitRefreshActive() {
+ // ...
+ }
+ }
+ ```
\ No newline at end of file
diff --git a/docs/content/Development/General-Topics/Global-Data.md b/docs/content/Development/General-Topics/Global-Data.md
new file mode 100644
index 0000000000..8442155303
--- /dev/null
+++ b/docs/content/Development/General-Topics/Global-Data.md
@@ -0,0 +1,41 @@
+---
+title: Global Caches / Data
+---
+
+
+# Storing Data Globally
+
+In certain cases (e.g. in a cache that holds all currently loaded instances of a machine), you might need to store data
+in a global (static and mutable) variable.
+
+When doing so, you need to ensure that remote and serverside instances don't get mixed up.
+
+
+## Using `SideLocal`
+
+!!! warning inline end "Not yet merged
_Branch: `mi-ender-link`_"
+
+To make working with this requirement easier, You can use `SideLocal` to store your global data.
+It is similar to Java's `ThreadLocal`, but operates on the game's sides instead.
+
+If you are currently on the remote side (`LDLib.isRemote()` / on the client's `main` thread), it will return the
+remote side's instance of your data. Otherwise, you will get the server side's instance.
+
+??? example "Example Usage"
+
+ ```java
+ public class MyCache {
+ private static SideLocal