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 (If you are developing for Minecraft 1.7.10, you can use SinTh0r4s' ExampleMod-template).
 * 3) Edit your project details (name, version, dependecies, etc.).
 * 4) Execute  /   in the root directory of your project
 * 5) In Eclipse / IntelliJ IDEA, import your workspace as a Gradle project.
 * 6) Done.

From an existing Repository

 * 1) Clone the repository
 * 2) Execute  /   in the root directory of your project
 * 3) In Eclipse / IntelliJ IDEA, import your workspace as an existing Gradle project.
 * 4) If the import fails, you may have to adjust the Gradle version and/or buildscript. If you are developing for Minecraft 1.7.10, read this guide.
 * 5) Execute  if you are using InteliJ to run the project inside your IDE.
 * 6) Done.

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.
 * Avoid hard-dependencies
 * Please do semantic versioning.

Contribution Procedure
Please do not have multiple changes/features in a single PR, make a separate PR for each. If they depend on each other, 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 this guide.
 * 4) Push code into your fork (or on a separate branch in main repo)
 * 5) 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
 * 6) * DreamMasterXXL, if it's about quest and/or recipe change.
 * 7) * GTNewHorizons/developers team, if it's some java/scala/kotlin code change.
 * 8) * mitchej123, if it's NEI.
 * 9) * 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).
 * 10) 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