Development

Tools
All applications that are grouped together can do about the same. This does not mean that you can pick any one of them, as they differ in functionality, style, performace and customizability. It is recommended you look at what they can do and try each one out, so you can decide which application you want to use for which use case.

Code Editors

 * Notepad++
 * Visual Studio Code
 * Sublime Text
 * Atom

Integrated Development Enviroments

 * Eclipse Note: as of version 4.17 Eclipse requires Java 11 or newer but you can still get older versions which support Java 8.
 * IntelliJ IDEA

Image Editors

 * GIMP
 * Paint.NET
 * Krita
 * LibreSprite
 * Aseprite Paid
 * Photoshop Paid

Modeling

 * Blockbench
 * MagicaVoxel
 * Blender

Animation

 * Block Model Animator
 * Animated Textures Editor
 * LibreSprite

Miscellaneous

 * JSONLint
 * Palette Library
 * Resource Pack Workbench
 * Bearded-Octo-Nemesis 2 (BON2)
 * FernFlower
 * Java Decompiler
 * MCP Mapping Viewer

From Scratch

 * 1) Create a new GitHub repository and clone it
 * 2) Choose and download a Forge* MDK and extract the contents of the ZIP-archive into the directory, where you cloned your repository to.
 * 3) Edit your project details (name, version, dependecies, etc.) in the   file.
 * 4) In Eclipse / IntelliJ IDEA, import your workspace as a Gradle project.
 * 5) Done.

From an existing Repository

 * 1) Clone the repository
 * 2) In Eclipse / IntelliJ IDEA, import your workspace as an existing Gradle project.
 * 3) If the import fails, you may have to adjust the Gradle version and/or buildscript. This default workspace can be used as a reference. The command  may help (or equivalent for eclipse). If   fails, delete the repository and re-install.
 * 4) Run  or   as appropriate to run from inside your IDE.
 * 5) Done.

* ) The official Minecraft Forge website can be found here. The MDKs linked above are modified because the original Forge MDK does not work without some changes. The linked MDKs have these changes applied.

Failed builds or IDE complain about ancient gradle version
In November 2021 mcp bot shutdown, making old projects unable to build (again). All existing buildscripts will need updating. Some repos under GTNH github org has already patched, but some less active ones aren't.

Identifying the problem
Look at  file. If you find  or   or   then this is the cause of your failed build.

Solving the problem

 * 1) Modify the   and replace the   line to  . If it is already with a newer gradle version, you can leave it unchanged.
 * 2) Replace the   block in   with this - keeping an eye out for anything additional it may have pulled in.

Code Style

 * Keep your added variables either private or constant unless absolutely necessary
 * Don't touch existing public variables' implementation, as this can break code using those variables.
 * Use thread-safe collections where you can, to make future multithreading possible
 * Comment your code, especially Javadoc-ing your methods and classes, if able
 * Try not to make one method do too much. Add helper methods if you need
 * Use the  annotation when overriding methods.
 * Please do semantic versioning.

Contribution Procedure
Please do not have multiple changes/features in a single PR, make a sepperate PR for each. If they depend on eachother, you can leave a note in the PR's description.
 * 1) Find something to contribute
 * 2) Fork the related projects (can skip this if you are a member of our github org)
 * 3) For certain old repos, buildscripts may need updating. See above The Gradle Mess section for solutions.
 * 4) Push code into your fork (or on a separate branch in main repo)
 * 5) Depending on the scale of your work, optionally bump the mod version up.
 * 6) Open a pull request and provide a description on what it changes/adds/removes. Include pictures/graphs if necessary. If there is a related issue, link it. Ask for review from
 * 7) * DreamMasterXXL, if it's about quest and/or recipe change.
 * 8) * GTNewHorizons/developers team, if it's some java/scala/kotlin code change.
 * 9) * mitchej123, if it's NEI.
 * 10) * Original mod developer, if you are contributing to his mod and he/she is still around (e.g. glease for TC4Tweaks, SinTh0r4s for VisualProspecting, GlodBlock for GoodGenerators).
 * 11) Address review problems. Resolve merge conflicts (if any). Wait for final merge. DO NOT merge the PR yourself, even if approved! This is a task of GTNewHorizons/admin members.

Resources
Not every wiki/tutorial/article/... listed here contains information about Minecraft version 1.7.10 but some topics haven't changed much and often the general methodology is the same. The newer the version, the less comparable the inner workings of Minecraft/Forge are to 1.7.10.

You can look at the source-code of most mods included in GTNH here.

If you look for something specific, use the search-function of your browser!

You can find an extensive list of modding resources, made by the MMD-Team, here.

Help

 * Mathematics on StackExchange: Forum for everything related to Mathematics
 * StackOverflow: Forum for everything related to Programming
 * #mod-dev ( GTNH Discord)
 * #mc-dev-other ( Minecraft Mod Development Discord)
 * #moddev ( Minecraft Pack Development Discord)
 * #mc-dev ( CurseForge Discord)
 * #help-modded-java ( Blockbench Discord)

Miscellaneous
All GregTech methods are taken from its sourcecode, version 5.09.34.15 (12th of March, 2021).

...an Item
Vanilla Items are located in.

...a Block
Vanilla Blocks are located in.

...a Fluid
Vanilla Fluids are located in.

...an ItemStack
If you want to change the meta-data, do