<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://forge.gemwire.uk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jriwanek</id>
	<title>Forge Community Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://forge.gemwire.uk/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jriwanek"/>
	<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/wiki/Special:Contributions/Jriwanek"/>
	<updated>2026-04-30T15:12:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Main_Page&amp;diff=2655</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Main_Page&amp;diff=2655"/>
		<updated>2021-06-28T22:28:51Z</updated>

		<summary type="html">&lt;p&gt;Jriwanek: Update Checker -&amp;gt; Version Checker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;templatestyles src=&amp;quot;:Main_Page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center title&amp;quot;&amp;gt;Forge Community Wiki&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Forge Community Wiki exists so that the community can:&lt;br /&gt;
&lt;br /&gt;
* collectively keep track of major changes and updates to Forge and Vanilla code;&lt;br /&gt;
* create and edit articles with in-depth explanations about a variety of Forge-related subjects; and&lt;br /&gt;
* contribute example code and tutorials for both simple and difficult concepts.&lt;br /&gt;
&lt;br /&gt;
This wiki is editable by any registered user with an account. This is to allow tracking of harmful edits, but isn't imposing any annoying limits. We welcome any edit, however small. Join the [https://discord.gg/Nn42eAh Discord] to discuss changes and edits to the wiki with others and the staff.&lt;br /&gt;
&lt;br /&gt;
''The wiki is still under heavy construction. Pages may move around, so if you bookmark a page, beware when the page is moved and your bookmarked link dies.''&lt;br /&gt;
&lt;br /&gt;
Please note that we only maintain wiki entries for the Latest and Long Term Support (LTS) releases. Once a documented release is no longer under LTS, it will be removed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center round_warning&amp;quot;&amp;gt;&lt;br /&gt;
Please read the [[FCWMeta:Wiki Policy|wiki policy]] before editing!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot; style=&amp;quot;margin-bottom: 2em&amp;quot;&amp;gt;&lt;br /&gt;
The current ''Latest'' version is '''1.16.5'''. The current ''Long Term Support (LTS)'' version is '''1.15.2'''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box_container center&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Beginner Topics&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Proper Mod Structuring]]&lt;br /&gt;
* [[Debug Profiler|The Debug Profiler]]&lt;br /&gt;
* [[Version Checker]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Common Concepts&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Sides|Understanding Sides]]&lt;br /&gt;
* [[Events|Understanding Events]]&lt;br /&gt;
* [[Registration]]&lt;br /&gt;
* [[Internationalization]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Forge Conventions&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Semantic Versioning]]&lt;br /&gt;
* [[Stages of Modloading]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Resources and Data&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Using Resources|Introduction]]&lt;br /&gt;
* [[Recipes]]&lt;br /&gt;
* [[Tags]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Blocks&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Making Blocks|Creating Blocks]]&lt;br /&gt;
* [[Understanding Blockstates]] &lt;br /&gt;
* [[Interacting With Blocks|Block Interactions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Items&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Making Items]]&lt;br /&gt;
* [[Making Tools]]&lt;br /&gt;
* [[ItemStack TileEntityRenderer|&amp;lt;tt&amp;gt;ItemStackTileEntityRenderer&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Data Generation&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Datageneration|Introduction]]&lt;br /&gt;
* [[Datageneration/Recipes|Recipes]]&lt;br /&gt;
* [[Datageneration/Tags|Tags]]&lt;br /&gt;
* [[Datageneration/Loot_Tables|Loot Tables]]&lt;br /&gt;
* [[Datageneration/I18n|Localization]]&lt;br /&gt;
* [[Datageneration/States and Models|&amp;lt;tt&amp;gt;BlockState&amp;lt;/tt&amp;gt;s and Models]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Tile Entities&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Basics of Tile Entities|Introduction]]&lt;br /&gt;
* [[Using Tile Entity Renderers]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Models&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Introduction to Models|Introduction]]&lt;br /&gt;
* [[Model JSONs]]&lt;br /&gt;
* [[BlockState JSONs]]&lt;br /&gt;
* [[Coloring textures dynamically|Dynamically Colored Textures]]&lt;br /&gt;
* [[Item Overrides]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Handling Information&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Understanding Networking|Introduction]]&lt;br /&gt;
* [[Using NBT|Named Binary Tag (NBT)]]&lt;br /&gt;
* [[Using PacketBuffer|Using &amp;lt;tt&amp;gt;PacketBuffer&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* [[Sending Packets|Sending and Receiving Packets]]&lt;br /&gt;
* [[Using SimpleChannel|Using &amp;lt;tt&amp;gt;SimpleChannel&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
* [[Networking with Entities]]&lt;br /&gt;
* [[DynamicOps|Using DynamicOps]]&lt;br /&gt;
* [[Codecs|Using Codecs]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Data Storage&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Capabilities|Understanding Capabilities]] &lt;br /&gt;
* [[Capabilities/Attaching|Attaching Capabilities]]&lt;br /&gt;
* [[World Saved Data]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Game Effects&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Effects]]&lt;br /&gt;
* [[Potions]]&lt;br /&gt;
* [[Particles]]&lt;br /&gt;
* [[Sounds]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Events&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Events|Understanding Events]]&lt;br /&gt;
* [[Entity Events]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Others&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Dependencies]]&lt;br /&gt;
* [[Dynamic Loot Modification]]&lt;br /&gt;
* [[Text Components|Text Components and Translation Keys]]&lt;br /&gt;
* [[Key Bindings]]&lt;br /&gt;
* [[Access Transformers]]&lt;br /&gt;
* [[Toolchain]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Recipes&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Recipes]]&lt;br /&gt;
* [[Custom Recipes|Custom Recipe Types]]&lt;br /&gt;
* [[Datageneration/Recipes|Datageneration]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jriwanek</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Getting_Started&amp;diff=2654</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Getting_Started&amp;diff=2654"/>
		<updated>2021-06-28T22:25:58Z</updated>

		<summary type="html">&lt;p&gt;Jriwanek: One I missed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Minecraft Forge''' is a modding framework, designed to allow different mods to load and work together to be compatible. Through the years, there has been many changes in the Forge tooling to make working with mods as seamless as possible. It is now easier than ever to start making your own mod.&lt;br /&gt;
&lt;br /&gt;
== The Mod Development Kit ==&lt;br /&gt;
The '''Mod Development Kit''' or '''MDK''' is a downloadable archive that contains the basic skeleton for starting a new mod. It contains the following files and folders:&lt;br /&gt;
&lt;br /&gt;
{{Tree list}}&lt;br /&gt;
* '''The Mod Development Kit'''&lt;br /&gt;
** &amp;lt;code&amp;gt;gradle/wrapper/&amp;lt;/code&amp;gt; - The folder containing the [https://docs.gradle.org/6.9/userguide/gradle_wrapper.html Gradle wrapper]'', Forge uses Gradle '''6.9'''''&lt;br /&gt;
** &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; - The sources folder&lt;br /&gt;
*** &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; - The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
**** &amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt; - The java sources for the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
***** ...&lt;br /&gt;
**** &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; - The resources for the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
***** &amp;lt;code&amp;gt;META-INF&amp;lt;/code&amp;gt; - The folder for '''metadata inf'''ormation files&amp;lt;ref&amp;gt;[https://stackoverflow.com/a/6075320/14416954 StackOverflow answer]: ''... Basically, if it was stored in META-INF, it was Meta-data Information...''&amp;lt;/ref&amp;gt;&lt;br /&gt;
****** &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; - The [[Proper Mod Structuring#The mods.toml file|&amp;lt;tt&amp;gt;mods.toml&amp;lt;/tt&amp;gt; file]], where mods are declared&lt;br /&gt;
***** &amp;lt;code&amp;gt;pack.mcmeta&amp;lt;/code&amp;gt; - File used by Minecraft to [[mc:Data Pack#pack.mcmeta|identify data and resource packs]]&lt;br /&gt;
** &amp;lt;code&amp;gt;.gitattributes&amp;lt;/code&amp;gt; - Used by [[wikipedia:Git|Git]] for specifying attributes for files&amp;lt;ref&amp;gt;[https://git-scm.com/docs/gitattributes Official git documentation on &amp;lt;tt&amp;gt;.gitattributes&amp;lt;/tt&amp;gt;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; - Used by Git for specifying intentionally untracked/ignored files&amp;lt;ref&amp;gt;[https://git-scm.com/docs/gitignore Official git documentation on &amp;lt;tt&amp;gt;.gitignore&amp;lt;/tt&amp;gt;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; - The Gradle buildscript, which defines the project and tasks&amp;lt;ref&amp;gt;[https://docs.gradle.org/6.9/userguide/tutorial_using_tasks.html Gradle User Guide for 6.9: ''Build Script Basics'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;changelog.txt&amp;lt;/code&amp;gt; - The Forge version changelog&lt;br /&gt;
** &amp;lt;code&amp;gt;CREDITS.txt&amp;lt;/code&amp;gt; - Forge's credits/''thank you'' file&lt;br /&gt;
** &amp;lt;code&amp;gt;gradle.properties&amp;lt;/code&amp;gt; - The Gradle properties file, for defining additional variables and options&amp;lt;ref&amp;gt;[https://docs.gradle.org/6.9/userguide/build_environment.html#sec:gradle_configuration_properties Gradle User Guide for 6.9: ''Build Environment § Gradle properties'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gradlew&amp;lt;/code&amp;gt; - The *nix shell file for executing the Gradle wrapper&lt;br /&gt;
** &amp;lt;code&amp;gt;gradlew.bat&amp;lt;/code&amp;gt; - The Windows batch file for executing the Gradle wrapper&lt;br /&gt;
** &amp;lt;code&amp;gt;LICENSE.txt&amp;lt;/code&amp;gt; - File containing the licensing information for Forge and libraries&lt;br /&gt;
** &amp;lt;code&amp;gt;README.txt&amp;lt;/code&amp;gt; - Readme file with basic setup instructions&lt;br /&gt;
{{Tree list/end}}&lt;br /&gt;
&lt;br /&gt;
== Basic MDK Setup ==&lt;br /&gt;
# Download the MDK from the [https://files.minecraftforge.net/ official Minecraft Forge download site] and extract the MDK into an empty folder.&lt;br /&gt;
# Open your IDE of choice, and import the project as a Gradle project.&lt;br /&gt;
#* For '''Eclipse''': &amp;lt;tt&amp;gt;File &amp;gt; Import &amp;gt; Gradle &amp;gt; Existing Gradle Project&amp;lt;/tt&amp;gt;, select the folder for the &amp;lt;tt&amp;gt;Project root directory&amp;lt;/tt&amp;gt;, click &amp;lt;tt&amp;gt;Finish&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* For '''IntelliJ IDEA''': &amp;lt;tt&amp;gt;File &amp;gt; Open&amp;lt;/tt&amp;gt;, select and open the folder, select the &amp;lt;tt&amp;gt;build.gradle&amp;lt;/tt&amp;gt; file, click &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt;, click &amp;lt;tt&amp;gt;Open as Project&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Wait for the setup process to complete and the Minecraft sources are decompiled.&lt;br /&gt;
# Generate the run configurations for your IDE using the appropriate Gradle task. &amp;lt;br&amp;gt;These tasks can be run on the command line using ''(Windows)'' &amp;lt;code&amp;gt;gradlew gen***Runs&amp;lt;/code&amp;gt; or ''(*nix)'' &amp;lt;code&amp;gt;./gradlew gen***Runs&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* For ''Eclipse'': the task is &amp;lt;code&amp;gt;genEclipseRuns&amp;lt;/code&amp;gt;; to run in the IDE directly, open the &amp;lt;tt&amp;gt;Gradle Tasks&amp;lt;/tt&amp;gt; tab on the bottom panel, ''wait until the tasks have loaded'' then expand the folder, expand the &amp;lt;tt&amp;gt;fg_runs&amp;lt;/tt&amp;gt; folder, then double-click &amp;lt;tt&amp;gt;genEclipseRuns&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#* For ''IntelliJ IDEA'': the task is &amp;lt;code&amp;gt;genIntellijRuns&amp;lt;/code&amp;gt;; to run in the IDE directly, open the &amp;lt;tt&amp;gt;Gradle&amp;lt;/tt&amp;gt; on the right, expand the project folder, double-click &amp;lt;tt&amp;gt;Tasks &amp;gt; fg_runs &amp;gt; genIntellijRuns&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#* For ''Visual Studio Code'': the task is &amp;lt;code&amp;gt;genVSCodeRuns&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|The most popular IDEs used by Forge and mod developers are [https://www.eclipse.org/eclipseide/ Eclipse] and [https://www.jetbrains.com/idea/ IntelliJ IDEA]. While Visual Studio Code has a run generation task, because of its relative unpopularity as an IDE for Minecraft modding, the user will have to self-diagnose any issues that may arise from their use of it.}}&lt;br /&gt;
&lt;br /&gt;
== Customizing the MDK ==&lt;br /&gt;
The MDK provides default values for the buildscript and &amp;lt;tt&amp;gt;mods.toml&amp;lt;/tt&amp;gt; file. These values should be replaced with your own mod's information.&lt;br /&gt;
&lt;br /&gt;
All edits should be done below the &amp;lt;code&amp;gt;apply plugin: 'net.minecraftforge.gradle'&amp;lt;/code&amp;gt; line. The lines above it are required for the Forge MDK to work correctly, and should not be modified without proper knowledge.&lt;br /&gt;
* All references to &amp;lt;code&amp;gt;examplemod&amp;lt;/code&amp;gt; in the buildscript should be replaced with your modid.&lt;br /&gt;
** Use your IDE's find-and-replace function to quickly replace these values.&lt;br /&gt;
** Pick a unique and memorable modid. The modid must be between 2 and 64 characters, and must consist of lowercase letters, numbers, underscores (&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;) and hyphens (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;). The recommendation is to avoid using acronyms and abbreviations.&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;archivesBaseName&amp;lt;/code&amp;gt; variable to your modid. This is used as the base name for the JAR file when you build your mod, and as the &amp;lt;tt&amp;gt;artifactId&amp;lt;/tt&amp;gt; of your mod's [https://maven.apache.org/pom.html#Maven_Coordinates maven coordinates].&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;group&amp;lt;/code&amp;gt; to your [[Proper Mod Structuring#Packaging|unique root java package]]. This is used as the &amp;lt;tt&amp;gt;groupId&amp;lt;/tt&amp;gt; of your mod's maven coordinates.&lt;br /&gt;
* In the &amp;lt;code&amp;gt;jar&amp;lt;/code&amp;gt; task, change the values of the &amp;lt;code&amp;gt;Specification-Vendor&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Implementation-Vendor&amp;lt;/code&amp;gt; keys to your username/brand name or other form of identification.&lt;br /&gt;
* ''Optional suggestion: '' Change the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; variable to have a 0 as the major version (ex. &amp;lt;code&amp;gt;'0.1'&amp;lt;/code&amp;gt;. This is to follow [[Semantic Versioning#During Development|semantic versioning guidelines]] for versions in active development.&lt;br /&gt;
&lt;br /&gt;
== Building and Testing ==&lt;br /&gt;
You can test your mod in the development environment using either your IDE's run configurations and built-in debugging utilities, or by running the &amp;lt;code&amp;gt;run*&amp;lt;/code&amp;gt; task as defined by the buildscript's run configurations.&lt;br /&gt;
&lt;br /&gt;
There are three default run configurations with the MDK:&lt;br /&gt;
* &amp;lt;code&amp;gt;runClient&amp;lt;/code&amp;gt;, for starting the client.&lt;br /&gt;
* &amp;lt;code&amp;gt;runServer&amp;lt;/code&amp;gt;, for starting the dedicated server. ''You will need to accept the EULA through the &amp;lt;tt&amp;gt;eula.txt&amp;lt;/tt&amp;gt; after running the server for the first time.''&lt;br /&gt;
* &amp;lt;code&amp;gt;runData&amp;lt;/code&amp;gt;, for starting the client in [[Datageneration|data generation]] mode.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Always test your mod in both the client and the dedicated server, even if you are making a one-sided mod. Mods should not crash when running on both sides, and one-sided mods should not crash if they run on the wrong side.}}&lt;br /&gt;
&lt;br /&gt;
You can build your mod's final JAR using the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; task. The resulting JAR will be located in the &amp;lt;code&amp;gt;build/libs&amp;lt;/code&amp;gt; folder under your project directory.&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Beginner Topics]]&lt;/div&gt;</summary>
		<author><name>Jriwanek</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Getting_Started&amp;diff=2653</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Getting_Started&amp;diff=2653"/>
		<updated>2021-06-28T22:22:56Z</updated>

		<summary type="html">&lt;p&gt;Jriwanek: Gradle 6.9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Minecraft Forge''' is a modding framework, designed to allow different mods to load and work together to be compatible. Through the years, there has been many changes in the Forge tooling to make working with mods as seamless as possible. It is now easier than ever to start making your own mod.&lt;br /&gt;
&lt;br /&gt;
== The Mod Development Kit ==&lt;br /&gt;
The '''Mod Development Kit''' or '''MDK''' is a downloadable archive that contains the basic skeleton for starting a new mod. It contains the following files and folders:&lt;br /&gt;
&lt;br /&gt;
{{Tree list}}&lt;br /&gt;
* '''The Mod Development Kit'''&lt;br /&gt;
** &amp;lt;code&amp;gt;gradle/wrapper/&amp;lt;/code&amp;gt; - The folder containing the [https://docs.gradle.org/current/userguide/gradle_wrapper.html Gradle wrapper]'', Forge uses Gradle '''6.9'''''&lt;br /&gt;
** &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; - The sources folder&lt;br /&gt;
*** &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; - The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
**** &amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt; - The java sources for the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
***** ...&lt;br /&gt;
**** &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt; - The resources for the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; source set&lt;br /&gt;
***** &amp;lt;code&amp;gt;META-INF&amp;lt;/code&amp;gt; - The folder for '''metadata inf'''ormation files&amp;lt;ref&amp;gt;[https://stackoverflow.com/a/6075320/14416954 StackOverflow answer]: ''... Basically, if it was stored in META-INF, it was Meta-data Information...''&amp;lt;/ref&amp;gt;&lt;br /&gt;
****** &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; - The [[Proper Mod Structuring#The mods.toml file|&amp;lt;tt&amp;gt;mods.toml&amp;lt;/tt&amp;gt; file]], where mods are declared&lt;br /&gt;
***** &amp;lt;code&amp;gt;pack.mcmeta&amp;lt;/code&amp;gt; - File used by Minecraft to [[mc:Data Pack#pack.mcmeta|identify data and resource packs]]&lt;br /&gt;
** &amp;lt;code&amp;gt;.gitattributes&amp;lt;/code&amp;gt; - Used by [[wikipedia:Git|Git]] for specifying attributes for files&amp;lt;ref&amp;gt;[https://git-scm.com/docs/gitattributes Official git documentation on &amp;lt;tt&amp;gt;.gitattributes&amp;lt;/tt&amp;gt;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; - Used by Git for specifying intentionally untracked/ignored files&amp;lt;ref&amp;gt;[https://git-scm.com/docs/gitignore Official git documentation on &amp;lt;tt&amp;gt;.gitignore&amp;lt;/tt&amp;gt;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; - The Gradle buildscript, which defines the project and tasks&amp;lt;ref&amp;gt;[https://docs.gradle.org/6.9/userguide/tutorial_using_tasks.html Gradle User Guide for 6.9: ''Build Script Basics'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;changelog.txt&amp;lt;/code&amp;gt; - The Forge version changelog&lt;br /&gt;
** &amp;lt;code&amp;gt;CREDITS.txt&amp;lt;/code&amp;gt; - Forge's credits/''thank you'' file&lt;br /&gt;
** &amp;lt;code&amp;gt;gradle.properties&amp;lt;/code&amp;gt; - The Gradle properties file, for defining additional variables and options&amp;lt;ref&amp;gt;[https://docs.gradle.org/6.9/userguide/build_environment.html#sec:gradle_configuration_properties Gradle User Guide for 6.9: ''Build Environment § Gradle properties'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gradlew&amp;lt;/code&amp;gt; - The *nix shell file for executing the Gradle wrapper&lt;br /&gt;
** &amp;lt;code&amp;gt;gradlew.bat&amp;lt;/code&amp;gt; - The Windows batch file for executing the Gradle wrapper&lt;br /&gt;
** &amp;lt;code&amp;gt;LICENSE.txt&amp;lt;/code&amp;gt; - File containing the licensing information for Forge and libraries&lt;br /&gt;
** &amp;lt;code&amp;gt;README.txt&amp;lt;/code&amp;gt; - Readme file with basic setup instructions&lt;br /&gt;
{{Tree list/end}}&lt;br /&gt;
&lt;br /&gt;
== Basic MDK Setup ==&lt;br /&gt;
# Download the MDK from the [https://files.minecraftforge.net/ official Minecraft Forge download site] and extract the MDK into an empty folder.&lt;br /&gt;
# Open your IDE of choice, and import the project as a Gradle project.&lt;br /&gt;
#* For '''Eclipse''': &amp;lt;tt&amp;gt;File &amp;gt; Import &amp;gt; Gradle &amp;gt; Existing Gradle Project&amp;lt;/tt&amp;gt;, select the folder for the &amp;lt;tt&amp;gt;Project root directory&amp;lt;/tt&amp;gt;, click &amp;lt;tt&amp;gt;Finish&amp;lt;/tt&amp;gt;&lt;br /&gt;
#* For '''IntelliJ IDEA''': &amp;lt;tt&amp;gt;File &amp;gt; Open&amp;lt;/tt&amp;gt;, select and open the folder, select the &amp;lt;tt&amp;gt;build.gradle&amp;lt;/tt&amp;gt; file, click &amp;lt;tt&amp;gt;OK&amp;lt;/tt&amp;gt;, click &amp;lt;tt&amp;gt;Open as Project&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Wait for the setup process to complete and the Minecraft sources are decompiled.&lt;br /&gt;
# Generate the run configurations for your IDE using the appropriate Gradle task. &amp;lt;br&amp;gt;These tasks can be run on the command line using ''(Windows)'' &amp;lt;code&amp;gt;gradlew gen***Runs&amp;lt;/code&amp;gt; or ''(*nix)'' &amp;lt;code&amp;gt;./gradlew gen***Runs&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* For ''Eclipse'': the task is &amp;lt;code&amp;gt;genEclipseRuns&amp;lt;/code&amp;gt;; to run in the IDE directly, open the &amp;lt;tt&amp;gt;Gradle Tasks&amp;lt;/tt&amp;gt; tab on the bottom panel, ''wait until the tasks have loaded'' then expand the folder, expand the &amp;lt;tt&amp;gt;fg_runs&amp;lt;/tt&amp;gt; folder, then double-click &amp;lt;tt&amp;gt;genEclipseRuns&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#* For ''IntelliJ IDEA'': the task is &amp;lt;code&amp;gt;genIntellijRuns&amp;lt;/code&amp;gt;; to run in the IDE directly, open the &amp;lt;tt&amp;gt;Gradle&amp;lt;/tt&amp;gt; on the right, expand the project folder, double-click &amp;lt;tt&amp;gt;Tasks &amp;gt; fg_runs &amp;gt; genIntellijRuns&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#* For ''Visual Studio Code'': the task is &amp;lt;code&amp;gt;genVSCodeRuns&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|The most popular IDEs used by Forge and mod developers are [https://www.eclipse.org/eclipseide/ Eclipse] and [https://www.jetbrains.com/idea/ IntelliJ IDEA]. While Visual Studio Code has a run generation task, because of its relative unpopularity as an IDE for Minecraft modding, the user will have to self-diagnose any issues that may arise from their use of it.}}&lt;br /&gt;
&lt;br /&gt;
== Customizing the MDK ==&lt;br /&gt;
The MDK provides default values for the buildscript and &amp;lt;tt&amp;gt;mods.toml&amp;lt;/tt&amp;gt; file. These values should be replaced with your own mod's information.&lt;br /&gt;
&lt;br /&gt;
All edits should be done below the &amp;lt;code&amp;gt;apply plugin: 'net.minecraftforge.gradle'&amp;lt;/code&amp;gt; line. The lines above it are required for the Forge MDK to work correctly, and should not be modified without proper knowledge.&lt;br /&gt;
* All references to &amp;lt;code&amp;gt;examplemod&amp;lt;/code&amp;gt; in the buildscript should be replaced with your modid.&lt;br /&gt;
** Use your IDE's find-and-replace function to quickly replace these values.&lt;br /&gt;
** Pick a unique and memorable modid. The modid must be between 2 and 64 characters, and must consist of lowercase letters, numbers, underscores (&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;) and hyphens (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;). The recommendation is to avoid using acronyms and abbreviations.&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;archivesBaseName&amp;lt;/code&amp;gt; variable to your modid. This is used as the base name for the JAR file when you build your mod, and as the &amp;lt;tt&amp;gt;artifactId&amp;lt;/tt&amp;gt; of your mod's [https://maven.apache.org/pom.html#Maven_Coordinates maven coordinates].&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;group&amp;lt;/code&amp;gt; to your [[Proper Mod Structuring#Packaging|unique root java package]]. This is used as the &amp;lt;tt&amp;gt;groupId&amp;lt;/tt&amp;gt; of your mod's maven coordinates.&lt;br /&gt;
* In the &amp;lt;code&amp;gt;jar&amp;lt;/code&amp;gt; task, change the values of the &amp;lt;code&amp;gt;Specification-Vendor&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Implementation-Vendor&amp;lt;/code&amp;gt; keys to your username/brand name or other form of identification.&lt;br /&gt;
* ''Optional suggestion: '' Change the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; variable to have a 0 as the major version (ex. &amp;lt;code&amp;gt;'0.1'&amp;lt;/code&amp;gt;. This is to follow [[Semantic Versioning#During Development|semantic versioning guidelines]] for versions in active development.&lt;br /&gt;
&lt;br /&gt;
== Building and Testing ==&lt;br /&gt;
You can test your mod in the development environment using either your IDE's run configurations and built-in debugging utilities, or by running the &amp;lt;code&amp;gt;run*&amp;lt;/code&amp;gt; task as defined by the buildscript's run configurations.&lt;br /&gt;
&lt;br /&gt;
There are three default run configurations with the MDK:&lt;br /&gt;
* &amp;lt;code&amp;gt;runClient&amp;lt;/code&amp;gt;, for starting the client.&lt;br /&gt;
* &amp;lt;code&amp;gt;runServer&amp;lt;/code&amp;gt;, for starting the dedicated server. ''You will need to accept the EULA through the &amp;lt;tt&amp;gt;eula.txt&amp;lt;/tt&amp;gt; after running the server for the first time.''&lt;br /&gt;
* &amp;lt;code&amp;gt;runData&amp;lt;/code&amp;gt;, for starting the client in [[Datageneration|data generation]] mode.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Always test your mod in both the client and the dedicated server, even if you are making a one-sided mod. Mods should not crash when running on both sides, and one-sided mods should not crash if they run on the wrong side.}}&lt;br /&gt;
&lt;br /&gt;
You can build your mod's final JAR using the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; task. The resulting JAR will be located in the &amp;lt;code&amp;gt;build/libs&amp;lt;/code&amp;gt; folder under your project directory.&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Beginner Topics]]&lt;/div&gt;</summary>
		<author><name>Jriwanek</name></author>
	</entry>
	<entry>
		<id>https://forge.gemwire.uk/index.php?title=Proper_Mod_Structuring&amp;diff=2652</id>
		<title>Proper Mod Structuring</title>
		<link rel="alternate" type="text/html" href="https://forge.gemwire.uk/index.php?title=Proper_Mod_Structuring&amp;diff=2652"/>
		<updated>2021-06-28T22:20:03Z</updated>

		<summary type="html">&lt;p&gt;Jriwanek: Correct for 1.16.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The structure of your mod is important in keeping your mod organized, for both your benefit and the benefit of anyone who wishses to make a feature for your mod. A disorganized mod structure may cause headaches when someone is trying to update it to a higher version, especially if they cannot modify the package structure, due to i.e. licensing.&lt;br /&gt;
&lt;br /&gt;
{{Tip|Note that this page is only a recommendation for your mod structure; you may structure your mod in any way you see fit.}}&lt;br /&gt;
&lt;br /&gt;
== Packaging ==&lt;br /&gt;
&lt;br /&gt;
Pick a unique package name for your mod. If you own a URL associated with your project, you can use it as your top level package. For example if you own &amp;quot;example.com&amp;quot;, you may use &amp;lt;code&amp;gt;com.example&amp;lt;/code&amp;gt; as your top level package. &lt;br /&gt;
The next level package is usually your mod's ID: if your mod ID is &amp;lt;code&amp;gt;examplemod&amp;lt;/code&amp;gt;, your mod's package will be &amp;lt;code&amp;gt;com.example.examplemod&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Tip/Important|Do not use a domain for your top level package if you do not own that domain. It is perfectly acceptable to have your top level package be named with anything, such as your name/nickname, or the name of the mod (&amp;lt;code&amp;gt;me.exampledude.examplemod&amp;lt;/code&amp;gt;).}}&lt;br /&gt;
&lt;br /&gt;
=== Using Subpackages ===&lt;br /&gt;
&lt;br /&gt;
Rather than clutter up a single class and package with everything, it is recommended you break your mod into subpackages.&lt;br /&gt;
&lt;br /&gt;
A common strategy is to make a subpackage for grouping classes that have a common purpose. For example, your blocks classes can be under &amp;lt;code&amp;gt;blocks&amp;lt;/code&amp;gt;, your entities classes can be under &amp;lt;code&amp;gt;entities&amp;lt;/code&amp;gt;, your helper utilities can be under &amp;lt;code&amp;gt;helpers&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
It is recommended to add a &amp;lt;code&amp;gt;client&amp;lt;/code&amp;gt; subpackage under your main package, to isolate your [[Sides|client-only code]] from the rest, such as your GUIs and renderers.&lt;br /&gt;
&lt;br /&gt;
By keeping your code in clean subpackages, you can grow your mod much more organically.&lt;br /&gt;
&lt;br /&gt;
== Class Naming Schemes ==&lt;br /&gt;
&lt;br /&gt;
A common class naming scheme allows easier deciphering of the purpose of the class, and makes it easier for someone developing for your mod to find specific classes.&lt;br /&gt;
&lt;br /&gt;
The usual style is to use suffixes for your classes, for example:&lt;br /&gt;
&lt;br /&gt;
* An &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; called &amp;lt;code&amp;gt;PowerRing&amp;lt;/code&amp;gt; would be in the &amp;lt;code&amp;gt;items&amp;lt;/code&amp;gt; package, with a class name of &amp;lt;code&amp;gt;PowerRingItem&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A &amp;lt;code&amp;gt;Block&amp;lt;/code&amp;gt; called &amp;lt;code&amp;gt;NotDirt&amp;lt;/code&amp;gt; would be in a &amp;lt;code&amp;gt;blocks&amp;lt;/code&amp;gt;  package, with a class name of &amp;lt;code&amp;gt;NotDirtBlock&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A &amp;lt;code&amp;gt;TileEntity&amp;lt;/code&amp;gt; for a block called &amp;lt;code&amp;gt;SuperChewer&amp;lt;/code&amp;gt; would be in a &amp;lt;code&amp;gt;tile&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;tileentity&amp;lt;/code&amp;gt; package, with a class name of &amp;lt;code&amp;gt;SuperChewerTile&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== The Mod File ==&lt;br /&gt;
&lt;br /&gt;
The main mod class - the class that is annotated with &amp;lt;code&amp;gt;@Mod&amp;lt;/code&amp;gt; - is usually put into the main package of your mod, and not placed into a subpackage. This allows an easier time to access this, as your main mod class is the entrypoint of your mod.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;@Mod&amp;lt;/code&amp;gt; annotation indicates to the mod loader that this class is the entry point of your mod. Each &amp;lt;code&amp;gt;@Mod&amp;lt;/code&amp;gt; annotation and their value should be paired with a mod id entry in your &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==The &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file==&lt;br /&gt;
The &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file is read by the mod loader to determine what mods are packaged into your JAR file, and what information to display to the user in the Mods listing screen (accessible by pressing the &amp;quot;Mods&amp;quot; button on the main menu of the game). &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file is formatted in [https://toml.io/en/ Tom's Obvious Minimal Language]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
, or TOML for short. The example &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file in the MDK provides comments explaining the contents of the file. It should be stored under the &amp;lt;code&amp;gt;META-INF&amp;lt;/code&amp;gt; folder in your resources directory (&amp;lt;code&amp;gt;src/main/resources/META-INF/mods.toml&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; file&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;TOML&amp;quot;&amp;gt;&lt;br /&gt;
modLoader=&amp;quot;javafml&amp;quot;&lt;br /&gt;
# Forge for 1.16.5 is version 36&lt;br /&gt;
loaderVersion=&amp;quot;[36,)&amp;quot;&lt;br /&gt;
license=&amp;quot;All rights reserved&amp;quot;&lt;br /&gt;
issueTrackerURL=&amp;quot;github.com/MinecraftForge/MinecraftForge/issues&amp;quot;&lt;br /&gt;
showAsResourcePack=false&lt;br /&gt;
&lt;br /&gt;
[[mods]]&lt;br /&gt;
    modId=&amp;quot;examplemod&amp;quot;&lt;br /&gt;
    version=&amp;quot;1.0.0.0&amp;quot;&lt;br /&gt;
    displayName=&amp;quot;Example Mod&amp;quot;&lt;br /&gt;
    updateJSONURL=&amp;quot;minecraftforge.net/versions.json&amp;quot;&lt;br /&gt;
    displayURL=&amp;quot;minecraftforge.net&amp;quot;&lt;br /&gt;
    logoFile=&amp;quot;logo.png&amp;quot;&lt;br /&gt;
    credits=&amp;quot;I'd like to thank my mother and father.&amp;quot;&lt;br /&gt;
    authors=&amp;quot;Author&amp;quot;&lt;br /&gt;
    description='''&lt;br /&gt;
Lets you craft dirt into diamonds. This is a traditional mod that has existed for eons. It is ancient. The holy Notch created it. Jeb rainbowfied it. Dinnerbone made it upside down. Etc.&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
[[dependencies.examplemod]]&lt;br /&gt;
    modId=&amp;quot;forge&amp;quot;&lt;br /&gt;
    mandatory=true&lt;br /&gt;
    versionRange=&amp;quot;[36,)&amp;quot;&lt;br /&gt;
    ordering=&amp;quot;NONE&amp;quot;&lt;br /&gt;
    side=&amp;quot;BOTH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[dependencies.examplemod]]&lt;br /&gt;
    modId=&amp;quot;minecraft&amp;quot;&lt;br /&gt;
    mandatory=true&lt;br /&gt;
    versionRange=&amp;quot;[1.16.5]&amp;quot;&lt;br /&gt;
    ordering=&amp;quot;NONE&amp;quot;&lt;br /&gt;
    side=&amp;quot;BOTH&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; is specified as&amp;lt;code&amp;gt;${file.jarVersion}&amp;lt;/code&amp;gt;, Forge will replace the string with the 'Implementation Version' specified in the jar manifest at runtime. Since the userdev environment has no jar manifest to pull from, it will be &amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt; instead. As such, it is usually recommended to leave this field alone.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mods.toml&amp;lt;/code&amp;gt; is split into three parts: the non-mod-specific properties, which are linked to the mod file; the mod properties, with a section for each mod; and dependency configurations, with a section for each mod's dependencies.Here is a table of attributes that may be given to a mod, where&amp;lt;code&amp;gt;mandatory&amp;lt;/code&amp;gt;means there is no default and the absence of the property causes an error.&lt;br /&gt;
===Non-Mod-Specific Properties===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!|Property&lt;br /&gt;
!|Type&lt;br /&gt;
!|Defaults&lt;br /&gt;
!|Description&lt;br /&gt;
!|Example&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;modLoader&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|The language loader for the mod. Used to specify an alternative language for the mod, such as Kotlin, if one exists. The Forge-provided Java loader is &amp;lt;code&amp;gt;javafml&amp;lt;/code&amp;gt;.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;javafml&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;loaderVersion&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|The acceptable version range of the language loader, expressed as a [https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html Maven version spec]. For the Forge-provided Java loader, the version is the major version of the Forge version.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;[36,)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|The license for the mod(s) in this JAR. This string may be any valid string, but it is suggested to set the value to be the name of your license, and/or a link to that license.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;GNU GPL v3, https://www.gnu.org/licenses/gpl-3.0.en.html&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;showAsResourcePack&amp;lt;/code&amp;gt;&lt;br /&gt;
|boolean&lt;br /&gt;
|&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|Whether to display this mod's resources as a separate option in the resource pack menu. If disabled, the mod's resources will be rolled into the &amp;quot;Mod resources&amp;quot; pack.&lt;br /&gt;
|&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;properties&amp;lt;/code&amp;gt;&lt;br /&gt;
|table&lt;br /&gt;
|&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;&lt;br /&gt;
|A table of custom substitution properties. This is used by &amp;lt;code&amp;gt;StringSubstitutor&amp;lt;/code&amp;gt; to replace values, using &amp;lt;code&amp;gt;${file.*}&amp;lt;/code&amp;gt;.&lt;br /&gt;
|&amp;lt;code&amp;gt;{ &amp;quot;thingy&amp;quot; = 1 }&amp;lt;/code&amp;gt;, used in &amp;lt;code&amp;gt;${file.thingy}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;issueTrackerURL&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|A URL for an issues tracker. This should never be a blank string, as that will cause an error.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;http://my.issue.tracker/&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Mod Properties===&lt;br /&gt;
A mod entry is defined by a new section starting with a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[mods]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; header (In TOML, the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[mods]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; defines an [https://toml.io/en/v1.0.0-rc.2#array-of-tables array of tables]). All properties from that line until the next header will become the properties for that mod.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!|Property&lt;br /&gt;
!|Type&lt;br /&gt;
!|Defaults&lt;br /&gt;
!|Description&lt;br /&gt;
!|Example&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;modId&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|The mod's identifier (modid). This must match the following regex: &amp;lt;code&amp;gt;^[a-z][a-z0-9_-]{1,63}$&amp;lt;/code&amp;gt; (starts with a lowercase letter; other characters must be a lowercase letter, number, underscore or hyphen; must be 2-64 characters long).&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;examplemod&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;namespace&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|value of &amp;lt;code&amp;gt;modId&amp;lt;/code&amp;gt;&lt;br /&gt;
|An override namespace. Currently, there is no use for this property&lt;br /&gt;
|&amp;lt;code&amp;gt;example&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|.), ideally conforming to [[Semantic_Versioning&amp;gt;Semantic Versioning]]. The default value in the MDK for this is &amp;lt;code&amp;gt;${file.jarVersion}&amp;lt;/code&amp;gt;, which is replaced at runtime with the &amp;lt;code&amp;gt;Implementation-Version&amp;lt;/code&amp;gt; found in the jar's manifest file.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;0.2.4-beta1&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;displayName&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|value of &amp;lt;code&amp;gt;modId&amp;lt;/code&amp;gt;&lt;br /&gt;
|The display name of the mod, for use in the Mods listing screen&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;Example Mod&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;MISSING DESCRIPTION&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|The description of the mod, for use in the Mods listing screen. It's recommended to use a multiline string (surrounded by &amp;lt;code&amp;gt;'''&amp;lt;code&amp;gt;)&amp;lt;/code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;Adds things and stuff. &amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logoFile&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|The path of the logo file image, for use in the Mods listing screen. The image must be in the root of the jar file, not in any subfolder thereof (e.g. the file is directly in &amp;lt;code&amp;gt;src/main/resources&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;myAwesomeLogo.png&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;logoBlur&amp;lt;/code&amp;gt;&lt;br /&gt;
|boolean&lt;br /&gt;
|&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|Whether to do some blurring on the mod's logo in the Mods listing screen. Has no effect if &amp;lt;code&amp;gt;logoFile&amp;lt;/code&amp;gt; is not set.&lt;br /&gt;
|&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;updateJSONURL&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|The update JSON URL, used by the [Update_Checker update checker]. This should never be a blank string, as that will cause an error.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;http://myurl.me/path/to/update.json&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;modproperties&amp;lt;/code&amp;gt;&lt;br /&gt;
|table&lt;br /&gt;
|&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;&lt;br /&gt;
|A table of custom mod properties; this is not used for Forge, but is mainly for use by mods.&lt;br /&gt;
|&amp;lt;code&amp;gt;{ &amp;quot;useThing&amp;quot; = true }&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;credits&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|Credits and acknowledgements for the mod, for use in the Mods listing screen. Can be any string.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;This person and that guy&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;authors&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|Authors for the mod, for use in the Mods listing screen. Can be any string.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;ExampleDude&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;displayURL&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|''nothing''&lt;br /&gt;
|A URL, displayed on the Mods listing screen. Can be any string.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;quot;http://example.com/&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Dependency Configurations===&lt;br /&gt;
Mods can define dependencies for their mods, which are checked by Forge before loading mods. This is used for e.g. ensuring your mod loads after another, or hard-crashing if a mod with a specified version does not exist.&lt;br /&gt;
&lt;br /&gt;
These dependency configurations, like the mod properties, are defined by a new section starting with &amp;lt;code&amp;gt;[[dependencies.]]&amp;lt;/code&amp;gt;, with &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt; being the mod id that has this dependency. All properties from that line until the next header will become the properties of that dependency configuration.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!|Property&lt;br /&gt;
!|Type&lt;br /&gt;
!|Defaults&lt;br /&gt;
!|Description&lt;br /&gt;
!|Example&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;modId&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|The mod id of the dependency.&lt;br /&gt;
|&amp;lt;code&amp;gt;examplelibrary&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mandatory&amp;lt;/code&amp;gt;&lt;br /&gt;
|boolean&lt;br /&gt;
|'''mandatory'''&lt;br /&gt;
|Whether to crash if this dependency is not met.&lt;br /&gt;
|&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;versionRange&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|The acceptable version range of the dependency, expressed as a [https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html Maven version spec]. An empty string is an unbounded version range, which matches any version.&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;[1.0,2.0)&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ordering&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;NONE&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Defines if the mod must load before or after this dependency. The valid values are &amp;lt;code&amp;gt;BEFORE&amp;lt;/code&amp;gt; (must load before), &amp;lt;code&amp;gt;AFTER&amp;lt;/code&amp;gt; (must load after), and &amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt; (does not care about order).&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;AFTER&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;side&amp;lt;/code&amp;gt;&lt;br /&gt;
|string&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;BOTH&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|physical side]]. The valid values are &amp;lt;code&amp;gt;CLIENT&amp;lt;/code&amp;gt; (present on the client), &amp;lt;code&amp;gt;SERVER&amp;lt;/code&amp;gt; (present on the dedicated server), and &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt; (present on both sides).&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;CLIENT&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Tip/Warning|When specifying dependency ordering between two or more mods, beware of cyclic order!&lt;br /&gt;
An example: if mod A must load before mod B, and mod B must load before mod A, the game will crash because of the circular cycle.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Beginner Topics]]&lt;/div&gt;</summary>
		<author><name>Jriwanek</name></author>
	</entry>
</feed>