<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://docs.exw.rainyville.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Unknown025</id>
	<title>EXW Docs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://docs.exw.rainyville.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Unknown025"/>
	<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/Special:Contributions/Unknown025"/>
	<updated>2026-07-21T13:12:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=17</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=17"/>
		<updated>2026-06-07T00:32:37Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: /* Adding a gun */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setting up your development environment =&lt;br /&gt;
To get started, you&#039;ll need to download and install Java JDK 8 and IntelliJ (or a Java compatible IDE of your choice, but we&#039;ll focus on IntelliJ here - the community edition is free). You will also need a copy of Minecraft Forge&#039;s MDK for Minecraft 1.12. I &#039;&#039;highly encourage&#039;&#039; using Minecraft Forge 1.12 instead of 1.12.2. You do not need knowledge of programming or Java to complete this tutorial, but it is helpful.&lt;br /&gt;
&lt;br /&gt;
Once you have the MDK downloaded, extract the contents into a directory of your choice. The name of the directory will be your project name. For the context of this tutorial, we&#039;ll use &amp;quot;Example Pack&amp;quot; as our project name. Open the directory in IntelliJ, and allow for the project to be imported. You may need to update Gradle to a supported version in the &amp;lt;code&amp;gt;gradle/wrapper&amp;lt;/code&amp;gt; directory inside the project, such as &amp;lt;code&amp;gt;https\://services.gradle.org/distributions/gradle-4.9-bin.zip&amp;lt;/code&amp;gt;. Your gradle-wrapper.properties file should look as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
distributionBase=GRADLE_USER_HOME&lt;br /&gt;
distributionPath=wrapper/dists&lt;br /&gt;
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip&lt;br /&gt;
zipStoreBase=GRADLE_USER_HOME&lt;br /&gt;
zipStorePath=wrapper/dists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure the project loads without any errors. Warnings are expected, as Forge 1.12 is a bit old. On the right side, open the Gradle side menu. Look for the &amp;quot;forgegradle&amp;quot; dropdown, and select &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt;. This will download all the files for Minecraft to run in our development environment. Once that task completes, run &amp;lt;code&amp;gt;genIntellijRuns&amp;lt;/code&amp;gt;. This will create two run tasks (visible in the top right of IntelliJ&#039;s interface, next to the green run triangle). If you see a miniature &amp;quot;X&amp;quot; next to the task, click the task dropdown, select edit, and ensure that JDK 8 and the &#039;&#039;main&#039;&#039; module are selected.&lt;br /&gt;
&lt;br /&gt;
Run Minecraft and ensure the game loads. You should be able to see the game run without any problems, and an example mod contained inside.&lt;br /&gt;
&lt;br /&gt;
Now, open the &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; file inside the project directory. We&#039;ll need to make a few edits here. After the &amp;lt;code&amp;gt;buildscript&amp;lt;/code&amp;gt; section, we&#039;ll insert the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the dependencies block, we&#039;ll add &amp;lt;code&amp;gt;deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&amp;lt;/code&amp;gt;. You may need to run &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt; after these changes to ensure that Expansive Weaponry is downloaded. Your &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
buildscript {&lt;br /&gt;
    repositories {&lt;br /&gt;
        jcenter()&lt;br /&gt;
        maven { url = &amp;quot;https://maven.minecraftforge.net/&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
    dependencies {&lt;br /&gt;
        classpath &#039;net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT&#039;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
apply plugin: &#039;net.minecraftforge.gradle.forge&#039;&lt;br /&gt;
//Only edit below this line, the above code adds and enables the necessary things for Forge/EXW to be setup.&lt;br /&gt;
&lt;br /&gt;
version = &amp;quot;1.0&amp;quot;&lt;br /&gt;
group = &amp;quot;com.yourname.modid&amp;quot;&lt;br /&gt;
archivesBaseName = &amp;quot;modid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sourceCompatibility = targetCompatibility = &#039;1.8&#039; // Need this here so eclipse task generates correctly.&lt;br /&gt;
compileJava {&lt;br /&gt;
    sourceCompatibility = targetCompatibility = &#039;1.8&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
minecraft {&lt;br /&gt;
    version = &amp;quot;1.12.2-14.23.5.2847&amp;quot;&lt;br /&gt;
    runDir = &amp;quot;run&amp;quot;&lt;br /&gt;
    mappings = &amp;quot;snapshot_20171003&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dependencies {&lt;br /&gt;
    deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Creating a pack =&lt;br /&gt;
Now that we have both Forge and Expansive Weaponry loaded in a development environment, we can create our content pack. You&#039;ll notice that when you run Minecraft from within IntelliJ, all the game files are located in the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; subdirectory in our project. Inside, there is an &amp;lt;code&amp;gt;Expansive Weaponry&amp;lt;/code&amp;gt; directory. We&#039;ll create our content pack by creating a new subdirectory inside, named &amp;quot;Example Pack&amp;quot;. It should be located inside &amp;lt;code&amp;gt;Example Pack/run/Expansive Weaponry/Example Pack&amp;lt;/code&amp;gt; (replace with your own pack name as applicable).&lt;br /&gt;
&lt;br /&gt;
Now, create a new file named &amp;lt;code&amp;gt;exwpack.info&amp;lt;/code&amp;gt;. This will contain some basic properties for our content pack. All the fields are documented at [[EXWPack.info]], but as a minimum we&#039;ll need our pack ID, version, and target API.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;packId&amp;quot;: &amp;quot;epack&amp;quot;,&lt;br /&gt;
  &amp;quot;authorList&amp;quot;: [],&lt;br /&gt;
  &amp;quot;url&amp;quot;: &amp;quot;https://docs.exw.rainyville.org/Getting_Started&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;logo&amp;quot;: &amp;quot;logo.png&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Example Pack&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;This is a description that&#039;ll be displayed in the main menu.&amp;quot;,&lt;br /&gt;
  &amp;quot;credits&amp;quot;: &amp;quot;Thanks to the wonderful tutorial author.&amp;quot;,&lt;br /&gt;
  &amp;quot;targetAPI&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;creativeTabIcon&amp;quot;: &amp;quot;diamond_sword&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At this point, if we load the game, you&#039;ll see the example pack shows up in the content pack list.&lt;br /&gt;
= Adding a gun =&lt;br /&gt;
Finally we get to the fun part: adding items. We&#039;ll add an AKM into the game. First step, in our content pack directory (inside the &amp;lt;code&amp;gt;Expansive Weaponry&amp;lt;/code&amp;gt; directory) we&#039;ll create a directory named &amp;lt;code&amp;gt;guns&amp;lt;/code&amp;gt;. Inside the new directory, we&#039;ll create a file named &amp;lt;code&amp;gt;epack.akm.json&amp;lt;/code&amp;gt;. It is strongly encouraged to name your JSON files as &amp;lt;code&amp;gt;&amp;lt;pack ID&amp;gt;.&amp;lt;item name&amp;gt;.json&amp;lt;/code&amp;gt;. Inside our newly created JSON file, we can now fill out some parameters for our gun (which can be found at [[GunType]]). Here&#039;s an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;modelName&amp;quot;: &amp;quot;epack.ModelAKM&amp;quot;,&lt;br /&gt;
  &amp;quot;maxStackSize&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;internalName&amp;quot;: &amp;quot;epack.akm&amp;quot;,&lt;br /&gt;
  &amp;quot;displayName&amp;quot;: &amp;quot;AKM&amp;quot;,&lt;br /&gt;
  &amp;quot;iconName&amp;quot;: &amp;quot;epack.akm&amp;quot;,&lt;br /&gt;
  &amp;quot;gunDamage&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;roundsPerMin&amp;quot;: 500,&lt;br /&gt;
  &amp;quot;recoilPitch&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;recoilYaw&amp;quot;: 5,&lt;br /&gt;
  &amp;quot;randomRecoilPitch&amp;quot;: 0.5,&lt;br /&gt;
  &amp;quot;randomRecoilYaw&amp;quot;: 0.5,&lt;br /&gt;
  &amp;quot;crouchRecoilModifier&amp;quot;: 0.8,&lt;br /&gt;
  &amp;quot;bulletSpread&amp;quot;: 2.0,&lt;br /&gt;
  &amp;quot;fireModes&amp;quot;: [&lt;br /&gt;
    &amp;quot;full&amp;quot;,&lt;br /&gt;
    &amp;quot;semi&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;reloadTime&amp;quot;: 60,&lt;br /&gt;
  &amp;quot;acceptedAmmo&amp;quot;: [&lt;br /&gt;
    &amp;quot;epack.30rnd76239&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;allowDefaultSounds&amp;quot;: true,&lt;br /&gt;
  &amp;quot;emptyPitch&amp;quot;: 0.05,&lt;br /&gt;
  &amp;quot;weaponSoundMap&amp;quot;: {&lt;br /&gt;
    &amp;quot;weaponFire&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;weaponFire&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.fire&amp;quot;,&lt;br /&gt;
        &amp;quot;soundNameDistant&amp;quot;: &amp;quot;epack.ak103.firedist&amp;quot;,&lt;br /&gt;
        &amp;quot;soundRange&amp;quot;: 64,&lt;br /&gt;
        &amp;quot;soundMaxRange&amp;quot;: 96,&lt;br /&gt;
        &amp;quot;soundFadeMultiplier&amp;quot;: 1&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;weaponFireSuppressed&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;weaponFireSuppressed&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.firesupp&amp;quot;,&lt;br /&gt;
        &amp;quot;soundRange&amp;quot;: 30,&lt;br /&gt;
        &amp;quot;soundMaxRange&amp;quot;: 30,&lt;br /&gt;
        &amp;quot;soundFadeMultiplier&amp;quot;: 1&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;magIn&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;magIn&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.magin&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;magOut&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;magOut&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.magout&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;rack&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;rack&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.rack&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
While this may look complicated, you can actually copy this file and edit the fields instead of typing everything out from scratch. Make sure you update all the names for the model name, internal name, sounds, and the accepted ammo.&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=16</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=16"/>
		<updated>2026-06-07T00:32:21Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Added section on how to create the pack.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setting up your development environment =&lt;br /&gt;
To get started, you&#039;ll need to download and install Java JDK 8 and IntelliJ (or a Java compatible IDE of your choice, but we&#039;ll focus on IntelliJ here - the community edition is free). You will also need a copy of Minecraft Forge&#039;s MDK for Minecraft 1.12. I &#039;&#039;highly encourage&#039;&#039; using Minecraft Forge 1.12 instead of 1.12.2. You do not need knowledge of programming or Java to complete this tutorial, but it is helpful.&lt;br /&gt;
&lt;br /&gt;
Once you have the MDK downloaded, extract the contents into a directory of your choice. The name of the directory will be your project name. For the context of this tutorial, we&#039;ll use &amp;quot;Example Pack&amp;quot; as our project name. Open the directory in IntelliJ, and allow for the project to be imported. You may need to update Gradle to a supported version in the &amp;lt;code&amp;gt;gradle/wrapper&amp;lt;/code&amp;gt; directory inside the project, such as &amp;lt;code&amp;gt;https\://services.gradle.org/distributions/gradle-4.9-bin.zip&amp;lt;/code&amp;gt;. Your gradle-wrapper.properties file should look as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
distributionBase=GRADLE_USER_HOME&lt;br /&gt;
distributionPath=wrapper/dists&lt;br /&gt;
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip&lt;br /&gt;
zipStoreBase=GRADLE_USER_HOME&lt;br /&gt;
zipStorePath=wrapper/dists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure the project loads without any errors. Warnings are expected, as Forge 1.12 is a bit old. On the right side, open the Gradle side menu. Look for the &amp;quot;forgegradle&amp;quot; dropdown, and select &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt;. This will download all the files for Minecraft to run in our development environment. Once that task completes, run &amp;lt;code&amp;gt;genIntellijRuns&amp;lt;/code&amp;gt;. This will create two run tasks (visible in the top right of IntelliJ&#039;s interface, next to the green run triangle). If you see a miniature &amp;quot;X&amp;quot; next to the task, click the task dropdown, select edit, and ensure that JDK 8 and the &#039;&#039;main&#039;&#039; module are selected.&lt;br /&gt;
&lt;br /&gt;
Run Minecraft and ensure the game loads. You should be able to see the game run without any problems, and an example mod contained inside.&lt;br /&gt;
&lt;br /&gt;
Now, open the &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; file inside the project directory. We&#039;ll need to make a few edits here. After the &amp;lt;code&amp;gt;buildscript&amp;lt;/code&amp;gt; section, we&#039;ll insert the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the dependencies block, we&#039;ll add &amp;lt;code&amp;gt;deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&amp;lt;/code&amp;gt;. You may need to run &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt; after these changes to ensure that Expansive Weaponry is downloaded. Your &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
buildscript {&lt;br /&gt;
    repositories {&lt;br /&gt;
        jcenter()&lt;br /&gt;
        maven { url = &amp;quot;https://maven.minecraftforge.net/&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
    dependencies {&lt;br /&gt;
        classpath &#039;net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT&#039;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
apply plugin: &#039;net.minecraftforge.gradle.forge&#039;&lt;br /&gt;
//Only edit below this line, the above code adds and enables the necessary things for Forge/EXW to be setup.&lt;br /&gt;
&lt;br /&gt;
version = &amp;quot;1.0&amp;quot;&lt;br /&gt;
group = &amp;quot;com.yourname.modid&amp;quot;&lt;br /&gt;
archivesBaseName = &amp;quot;modid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sourceCompatibility = targetCompatibility = &#039;1.8&#039; // Need this here so eclipse task generates correctly.&lt;br /&gt;
compileJava {&lt;br /&gt;
    sourceCompatibility = targetCompatibility = &#039;1.8&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
minecraft {&lt;br /&gt;
    version = &amp;quot;1.12.2-14.23.5.2847&amp;quot;&lt;br /&gt;
    runDir = &amp;quot;run&amp;quot;&lt;br /&gt;
    mappings = &amp;quot;snapshot_20171003&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dependencies {&lt;br /&gt;
    deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Creating a pack =&lt;br /&gt;
Now that we have both Forge and Expansive Weaponry loaded in a development environment, we can create our content pack. You&#039;ll notice that when you run Minecraft from within IntelliJ, all the game files are located in the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; subdirectory in our project. Inside, there is an &amp;lt;code&amp;gt;Expansive Weaponry&amp;lt;/code&amp;gt; directory. We&#039;ll create our content pack by creating a new subdirectory inside, named &amp;quot;Example Pack&amp;quot;. It should be located inside &amp;lt;code&amp;gt;Example Pack/run/Expansive Weaponry/Example Pack&amp;lt;/code&amp;gt; (replace with your own pack name as applicable).&lt;br /&gt;
&lt;br /&gt;
Now, create a new file named &amp;lt;code&amp;gt;exwpack.info&amp;lt;/code&amp;gt;. This will contain some basic properties for our content pack. All the fields are documented at [[EXWPack.info]], but as a minimum we&#039;ll need our pack ID, version, and target API.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;packId&amp;quot;: &amp;quot;epack&amp;quot;,&lt;br /&gt;
  &amp;quot;authorList&amp;quot;: [],&lt;br /&gt;
  &amp;quot;url&amp;quot;: &amp;quot;https://docs.exw.rainyville.org/Getting_Started&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;logo&amp;quot;: &amp;quot;logo.png&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Example Pack&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;This is a description that&#039;ll be displayed in the main menu.&amp;quot;,&lt;br /&gt;
  &amp;quot;credits&amp;quot;: &amp;quot;Thanks to the wonderful tutorial author.&amp;quot;,&lt;br /&gt;
  &amp;quot;targetAPI&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
  &amp;quot;creativeTabIcon&amp;quot;: &amp;quot;diamond_sword&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At this point, if we load the game, you&#039;ll see the example pack shows up in the content pack list.&lt;br /&gt;
= Adding a gun =&lt;br /&gt;
Finally we get to the fun part: adding items. We&#039;ll add an AKM into the game. First step, in our content pack directory (inside the &amp;lt;code&amp;gt;Expansive Weaponry&amp;lt;/code&amp;gt; directory) we&#039;ll create a directory named &amp;lt;code&amp;gt;guns&amp;lt;/code&amp;gt;. Inside the new directory, we&#039;ll create a file named &amp;lt;code&amp;gt;epack.akm.json&amp;lt;/code&amp;gt;. It is strongly encouraged to name your JSON files as &amp;lt;code&amp;gt;&amp;lt;pack ID&amp;gt;.&amp;lt;item name&amp;gt;.json&amp;lt;/code&amp;gt;. Inside our newly created JSON file, we can now fill out some parameters for our gun (which can be found at [[GunType]]). Here&#039;s an example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;modelName&amp;quot;: &amp;quot;epack.ModelAKM&amp;quot;,&lt;br /&gt;
  &amp;quot;maxStackSize&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;internalName&amp;quot;: &amp;quot;epack.akm&amp;quot;,&lt;br /&gt;
  &amp;quot;displayName&amp;quot;: &amp;quot;AKM&amp;quot;,&lt;br /&gt;
  &amp;quot;iconName&amp;quot;: &amp;quot;epack.akm&amp;quot;,&lt;br /&gt;
  &amp;quot;gunDamage&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;roundsPerMin&amp;quot;: 500,&lt;br /&gt;
  &amp;quot;recoilPitch&amp;quot;: 8,&lt;br /&gt;
  &amp;quot;recoilYaw&amp;quot;: 5,&lt;br /&gt;
  &amp;quot;randomRecoilPitch&amp;quot;: 0.5,&lt;br /&gt;
  &amp;quot;randomRecoilYaw&amp;quot;: 0.5,&lt;br /&gt;
  &amp;quot;crouchRecoilModifier&amp;quot;: 0.8,&lt;br /&gt;
  &amp;quot;bulletSpread&amp;quot;: 2.0,&lt;br /&gt;
  &amp;quot;fireModes&amp;quot;: [&lt;br /&gt;
    &amp;quot;full&amp;quot;,&lt;br /&gt;
    &amp;quot;semi&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;reloadTime&amp;quot;: 60,&lt;br /&gt;
  &amp;quot;acceptedAmmo&amp;quot;: [&lt;br /&gt;
    &amp;quot;epack.30rnd76239&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;allowDefaultSounds&amp;quot;: true,&lt;br /&gt;
  &amp;quot;emptyPitch&amp;quot;: 0.05,&lt;br /&gt;
  &amp;quot;weaponSoundMap&amp;quot;: {&lt;br /&gt;
    &amp;quot;weaponFire&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;weaponFire&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.fire&amp;quot;,&lt;br /&gt;
        &amp;quot;soundNameDistant&amp;quot;: &amp;quot;epack.ak103.firedist&amp;quot;,&lt;br /&gt;
        &amp;quot;soundRange&amp;quot;: 64,&lt;br /&gt;
        &amp;quot;soundMaxRange&amp;quot;: 96,&lt;br /&gt;
        &amp;quot;soundFadeMultiplier&amp;quot;: 1&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;weaponFireSuppressed&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;weaponFireSuppressed&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.firesupp&amp;quot;,&lt;br /&gt;
        &amp;quot;soundRange&amp;quot;: 30,&lt;br /&gt;
        &amp;quot;soundMaxRange&amp;quot;: 30,&lt;br /&gt;
        &amp;quot;soundFadeMultiplier&amp;quot;: 1&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;magIn&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;magIn&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.magin&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;magOut&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;magOut&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.magout&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;rack&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;soundEvent&amp;quot;: &amp;quot;rack&amp;quot;,&lt;br /&gt;
        &amp;quot;soundName&amp;quot;: &amp;quot;epack.ak103.rack&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
While this may look complicated, you can actually copy this file and edit the fields instead of typing everything out from scratch. Make sure you update all the names for the model name, internal name, sounds, and the accept ammo.&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=15</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Getting_Started&amp;diff=15"/>
		<updated>2026-06-07T00:12:51Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created basic tutorial to configure development environment for pack dev.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Creating a new content pack =&lt;br /&gt;
To get started, you&#039;ll need to download and install Java JDK 8 and IntelliJ (or a Java compatible IDE of your choice, but we&#039;ll focus on IntelliJ here - the community edition is free). You will also need a copy of Minecraft Forge&#039;s MDK for Minecraft 1.12. I &#039;&#039;highly encourage&#039;&#039; using Minecraft Forge 1.12 instead of 1.12.2.&lt;br /&gt;
&lt;br /&gt;
Once you have the MDK downloaded, extract the contents into a directory of your choice. The name of the directory will be your project name. For the context of this tutorial, we&#039;ll use &amp;quot;Example Pack&amp;quot; as our project name. Open the directory in IntelliJ, and allow for the project to be imported. You may need to update Gradle to a supported version in the &amp;lt;code&amp;gt;gradle/wrapper&amp;lt;/code&amp;gt; directory inside the project, such as &amp;lt;code&amp;gt;https\://services.gradle.org/distributions/gradle-4.9-bin.zip&amp;lt;/code&amp;gt;. Your gradle-wrapper.properties file should look as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
distributionBase=GRADLE_USER_HOME&lt;br /&gt;
distributionPath=wrapper/dists&lt;br /&gt;
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip&lt;br /&gt;
zipStoreBase=GRADLE_USER_HOME&lt;br /&gt;
zipStorePath=wrapper/dists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure the project loads without any errors. Warnings are expected, as Forge 1.12 is a bit old. On the right side, open the Gradle side menu. Look for the &amp;quot;forgegradle&amp;quot; dropdown, and select &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt;. This will download all the files for Minecraft to run in our development environment. Once that task completes, run &amp;lt;code&amp;gt;genIntellijRuns&amp;lt;/code&amp;gt;. This will create two run tasks (visible in the top right of IntelliJ&#039;s interface, next to the green run triangle). If you see a miniature &amp;quot;X&amp;quot; next to the task, click the task dropdown, select edit, and ensure that JDK 8 and the &#039;&#039;main&#039;&#039; module are selected.&lt;br /&gt;
&lt;br /&gt;
Run Minecraft and ensure the game loads. You should be able to see the game run without any problems, and an example mod contained inside.&lt;br /&gt;
&lt;br /&gt;
Now, open the &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; file inside the project directory. We&#039;ll need to make a few edits here. After the &amp;lt;code&amp;gt;buildscript&amp;lt;/code&amp;gt; section, we&#039;ll insert the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in the dependencies block, we&#039;ll add &amp;lt;code&amp;gt;deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&amp;lt;/code&amp;gt;. You may need to run &amp;lt;code&amp;gt;setupDecompWorkspace&amp;lt;/code&amp;gt; after these changes to ensure that Expansive Weaponry is downloaded. Your &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt; should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
buildscript {&lt;br /&gt;
    repositories {&lt;br /&gt;
        jcenter()&lt;br /&gt;
        maven { url = &amp;quot;https://maven.minecraftforge.net/&amp;quot; }&lt;br /&gt;
    }&lt;br /&gt;
    dependencies {&lt;br /&gt;
        classpath &#039;net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT&#039;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
repositories {&lt;br /&gt;
    maven {&lt;br /&gt;
        name = &amp;quot;Rainyville Maven&amp;quot;&lt;br /&gt;
        url = &amp;quot;https://maven.rainyville.org&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
apply plugin: &#039;net.minecraftforge.gradle.forge&#039;&lt;br /&gt;
//Only edit below this line, the above code adds and enables the necessary things for Forge/EXW to be setup.&lt;br /&gt;
&lt;br /&gt;
version = &amp;quot;1.0&amp;quot;&lt;br /&gt;
group = &amp;quot;com.yourname.modid&amp;quot;&lt;br /&gt;
archivesBaseName = &amp;quot;modid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sourceCompatibility = targetCompatibility = &#039;1.8&#039; // Need this here so eclipse task generates correctly.&lt;br /&gt;
compileJava {&lt;br /&gt;
    sourceCompatibility = targetCompatibility = &#039;1.8&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
minecraft {&lt;br /&gt;
    version = &amp;quot;1.12.2-14.23.5.2847&amp;quot;&lt;br /&gt;
    runDir = &amp;quot;run&amp;quot;&lt;br /&gt;
    mappings = &amp;quot;snapshot_20171003&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dependencies {&lt;br /&gt;
    deobfCompile &#039;org.rainyville.modulus:expansive-weaponry:1.12-1.1.9&#039;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=14</id>
		<title>AmmoType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=14"/>
		<updated>2026-06-04T08:20:03Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: /* AmmoType (extends BaseType) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AmmoType (extends [[BaseType]]) ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| numBullets || int || 1 || Number of bullets fired per shot.&lt;br /&gt;
|-&lt;br /&gt;
| ammoCapacity || int || 30 || Ammo capacity amount.&lt;br /&gt;
|-&lt;br /&gt;
| magazineCount || Integer || - || Magazine count.&lt;br /&gt;
|-&lt;br /&gt;
| reloadTime || float || - || Number of seconds it should take to reload.&lt;br /&gt;
|-&lt;br /&gt;
| recoilPitch || float || 0.0F || Base value for upwards cursor/view recoil.&lt;br /&gt;
|-&lt;br /&gt;
| recoilYaw || float || 0.0F || Base value for left/right cursor/view recoil.&lt;br /&gt;
|-&lt;br /&gt;
| bulletDamage || float || 1 || Damage inflicted per bullet, multiplied by the gun damage value.&lt;br /&gt;
|-&lt;br /&gt;
| bulletSpread || float || - || The amount that bullets spread out when fired.&lt;br /&gt;
|-&lt;br /&gt;
| emptyOnCraft || boolean || false || Will this ammo item be loaded or empty when crafted?&lt;br /&gt;
|-&lt;br /&gt;
| allowEmptyMagazines || boolean || true || Override ammo deletion, to allow for enabling or disabling of returned empty magazines.&lt;br /&gt;
|-&lt;br /&gt;
| refillCost || [[JsonItemStack]][] || &amp;lt;code&amp;gt;[{&amp;quot;id&amp;quot;: &amp;quot;gunpowder&amp;quot;, &amp;quot;count&amp;quot;: 2}]&amp;lt;/code&amp;gt; || Cost to refill this magazine, per each missing bullet. Set to null to disable magazine refilling.&lt;br /&gt;
|-&lt;br /&gt;
| subAmmo || String[] || - || The ammo type(s) that can be loaded into this item.&lt;br /&gt;
|-&lt;br /&gt;
| potionEffects || [[PotionEntry]][] || - || Array of potion effects applied to an entity upon bullet impact.&lt;br /&gt;
|-&lt;br /&gt;
| explosionSize || Integer || null || When set and greater than zero, this will cause an explosion on impact with a block.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=EXWPack.info&amp;diff=13</id>
		<title>EXWPack.info</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=EXWPack.info&amp;diff=13"/>
		<updated>2026-06-04T08:07:00Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created EXWPack.info page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== EXWPack.info ==&lt;br /&gt;
This file defines basic metadata for your content pack. &lt;br /&gt;
&lt;br /&gt;
As of v1.2.0, this file will be &#039;&#039;required&#039;&#039; for your content pack to be loaded.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Required || Definition&lt;br /&gt;
|-&lt;br /&gt;
| packId || String || - || YES || This pack&#039;s &#039;&#039;&#039;unique&#039;&#039;&#039; identifier. Please make sure this is a unique ID value. Must be all lowercase, with no spaces or special characters.&lt;br /&gt;
|-&lt;br /&gt;
| authorList || String[] || [] || || List of authors for this pack.&lt;br /&gt;
|-&lt;br /&gt;
| url || String || &amp;quot;&amp;quot; || || URL for this pack&#039;s website.&lt;br /&gt;
|-&lt;br /&gt;
| version || String || &amp;quot;1.0.0&amp;quot; || YES || This pack&#039;s version.&lt;br /&gt;
|-&lt;br /&gt;
| logo || String || &amp;quot;&amp;quot; || || This pack&#039;s logo file.&lt;br /&gt;
|-&lt;br /&gt;
| name || String || &amp;quot;&amp;quot; || || Name of this pack.&lt;br /&gt;
|-&lt;br /&gt;
| credits || String || &amp;quot;&amp;quot; || || Credits/description for this pack.&lt;br /&gt;
|-&lt;br /&gt;
| targetAPI || String || - || YES || The target API this content pack is compatible with. Please see the [https://exw.rainyville.org/dev/api-targets API targets page] for more details.&lt;br /&gt;
|-&lt;br /&gt;
| creativeTabIcon || String || - || || The item ID to set as the creative tab icon.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=BaseType&amp;diff=12</id>
		<title>BaseType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=BaseType&amp;diff=12"/>
		<updated>2026-06-04T07:49:50Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: /* BaseType */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BaseType ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| modelName || String || - || Name of the model for this item.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;modelLocation&amp;lt;/s&amp;gt; || String || - || Location of the Wavefront OBJ file, stemming from &amp;quot;assets/exw/wavefront/&amp;lt;object type&amp;gt;/&amp;quot;&lt;br /&gt;
Deprecated: Use modelName to specify the name of your model file.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;loadWavefront&amp;lt;/s&amp;gt; || Boolean || false || Whether this type should try to load a Wavefront OBJ model from modelLocation.&lt;br /&gt;
Deprecated: Use ModelType to determine which type of model this item has.&lt;br /&gt;
|-&lt;br /&gt;
| modelType || [[ModelType]] || ModelType.TOOLBOX || Determines which type of model will be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| maxStackSize || Integer || - || The maximum stack size for this item. (If not specified, a default value will be used depending on the type.)&lt;br /&gt;
|-&lt;br /&gt;
| modelSkins || [[SkinType]][] || - || The skins available for this item.&lt;br /&gt;
|-&lt;br /&gt;
| internalName || String || - || The unlocalized name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| displayName || String || - || The display name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| iconName || String || - || The name of the icon for this item.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=SkinType&amp;diff=11</id>
		<title>SkinType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=SkinType&amp;diff=11"/>
		<updated>2026-06-04T07:48:57Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created SkinType page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BaseType ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;internalName&amp;lt;/s&amp;gt; || String || - || (Deprecated) Unlocalized name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| displayName || String || - || The display name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| skinAsset || String || - || Location of the skin asset.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;requiredItems&amp;lt;/s&amp;gt; || String[] || - || (Deprecated) Not implemented.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=ModelType&amp;diff=10</id>
		<title>ModelType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=ModelType&amp;diff=10"/>
		<updated>2026-06-04T07:45:43Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created ModelType page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ModelType ==&lt;br /&gt;
The following are available values that apply to any field requiring the parameter &amp;lt;code&amp;gt;ModelType&amp;lt;/code&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Directory !! File Extension&lt;br /&gt;
|-&lt;br /&gt;
| TOOLBOX || - || -&lt;br /&gt;
|-&lt;br /&gt;
| WAVEFRONT || wavefront || obj&lt;br /&gt;
|-&lt;br /&gt;
| METASEQUOIA || metaseq || mqo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Where your models should go ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbox ===&lt;br /&gt;
Toolbox models go into the Java package &amp;lt;code&amp;gt;org.rainyville.modulus.client.model&amp;lt;/code&amp;gt;. It is best practice to create your own package inside, such as &amp;lt;code&amp;gt;org.rainyville.modulus.client.model.w44&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Wavefront ===&lt;br /&gt;
OBJ models go into your content pack&#039;s assets folder. For example, if your content pack is named &amp;quot;Modern Warfare&amp;quot; and you&#039;re adding a vehicle model, it would go into &amp;lt;code&amp;gt;Modern Warfare/assets/exw/wavefront/vehicles&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Metasequoia ===&lt;br /&gt;
Metaequoia models follow the same format as OBJ models, except instead of &amp;quot;wavefront&amp;quot;, models go into a &amp;quot;metaseq&amp;quot; folder, such as &amp;lt;code&amp;gt;Modern Warfare/assets/exw/metaseq/vehicles&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=BaseType&amp;diff=9</id>
		<title>BaseType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=BaseType&amp;diff=9"/>
		<updated>2026-06-04T07:38:13Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created BaseType page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BaseType ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| modelName || String || - || Name of the model for this item.&lt;br /&gt;
|-&lt;br /&gt;
| modelLocation || String || - || Location of the Wavefront OBJ file, stemming from &amp;quot;assets/exw/wavefront/&amp;lt;object type&amp;gt;/&amp;quot;&lt;br /&gt;
Deprecated: Use modelName to specify the name of your model file.&lt;br /&gt;
|-&lt;br /&gt;
| loadWavefront || Boolean || false || Whether this type should try to load a Wavefront OBJ model from modelLocation.&lt;br /&gt;
Deprecated: Use ModelType to determine which type of model this item has.&lt;br /&gt;
|-&lt;br /&gt;
| modelType || [[ModelType]] || ModelType.TOOLBOX || Determines which type of model will be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| maxStackSize || Integer || - || The maximum stack size for this item. (If not specified, a default value will be used depending on the type.)&lt;br /&gt;
|-&lt;br /&gt;
| modelSkins || [[SkinType]][] || - || The skins available for this item.&lt;br /&gt;
|-&lt;br /&gt;
| internalName || String || - || The unlocalized name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| displayName || String || - || The display name for this item.&lt;br /&gt;
|-&lt;br /&gt;
| iconName || String || - || The name of the icon for this item.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=8</id>
		<title>AmmoType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=8"/>
		<updated>2026-06-04T04:42:32Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: /* AmmoType (extends BaseType) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AmmoType (extends [[BaseType]]) ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| numBullets || int || 1 || Number of bullets fired per shot.&lt;br /&gt;
|-&lt;br /&gt;
| ammoCapacity || int || 30 || Ammo capacity amount.&lt;br /&gt;
|-&lt;br /&gt;
| magazineCount || Integer || - || Magazine count.&lt;br /&gt;
|-&lt;br /&gt;
| reloadTime || float || - || Number of seconds it should take to reload.&lt;br /&gt;
|-&lt;br /&gt;
| recoilPitch || float || 0.0F || Base value for upwards cursor/view recoil.&lt;br /&gt;
|-&lt;br /&gt;
| recoilYaw || float || 0.0F || Base value for left/right cursor/view recoil.&lt;br /&gt;
|-&lt;br /&gt;
| bulletDamage || float || 1 || Damage inflicted per bullet, multiplied by the gun damage value.&lt;br /&gt;
|-&lt;br /&gt;
| bulletSpread || float || - || The amount that bullets spread out when fired.&lt;br /&gt;
|-&lt;br /&gt;
| emptyOnCraft || boolean || false || Will this ammo item be loaded or empty when crafted?&lt;br /&gt;
|-&lt;br /&gt;
| allowEmptyMagazines || boolean || true || Override ammo deletion, to allow for enabling or disabling of returned empty magazines.&lt;br /&gt;
|-&lt;br /&gt;
| refillCost || JsonItemStack[] || [{&amp;quot;id&amp;quot;: &amp;quot;gunpowder&amp;quot;, &amp;quot;count&amp;quot;: 2}] || Cost to refill this magazine, per each missing bullet. Set to null to disable magazine refilling.&lt;br /&gt;
|-&lt;br /&gt;
| subAmmo || String[] || - || The ammo type(s) that can be loaded into this item.&lt;br /&gt;
|-&lt;br /&gt;
| potionEffects || PotionEntry[] || - || Array of potion effects applied to an entity upon bullet impact.&lt;br /&gt;
|-&lt;br /&gt;
| explosionSize || Integer || null || When set and greater than zero, this will cause an explosion on impact with a block.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=7</id>
		<title>AmmoType</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=AmmoType&amp;diff=7"/>
		<updated>2026-06-04T04:34:36Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created page with &amp;quot;== AmmoType (extends BaseType) == For each type, the table lists each field, type, default value (if applicable), and definition. {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot; |- ! Field !! Type !! Default !! Definition |- | numBullets || int || 1 || Number of bullets fired per shot. |}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== AmmoType (extends [[BaseType]]) ==&lt;br /&gt;
For each type, the table lists each field, type, default value (if applicable), and definition.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Type !! Default !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| numBullets || int || 1 || Number of bullets fired per shot.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=6</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=6"/>
		<updated>2026-06-04T04:28:36Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Updated page to be more uniform.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Box|&lt;br /&gt;
BORDER = #9999FF|&lt;br /&gt;
BACKGROUND = #99CCFF|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = Expansive Weaponry Documentation |&lt;br /&gt;
CONTENT =  &lt;br /&gt;
Welcome to the new home of the Expansive Weaponry docs!&lt;br /&gt;
&lt;br /&gt;
=== Downloads ===&lt;br /&gt;
* [https://exw.rainyville.org/downloads Official website]&lt;br /&gt;
* [https://www.curseforge.com/minecraft/mc-mods/expansive-weaponry/ CurseForge]&lt;br /&gt;
&amp;lt;small&amp;gt;Please report any other downloads to the mod creators.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating a content pack ===&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
=== Reference ===&lt;br /&gt;
The following is a list of all fields, default values, and descriptions for all applicable configurable content.&lt;br /&gt;
&lt;br /&gt;
* [[AmmoType]]&lt;br /&gt;
* [[ArmorInfo]]&lt;br /&gt;
* [[ArmorType]]&lt;br /&gt;
* [[AttachmentEnum]]&lt;br /&gt;
* [[BackpackInfo]]&lt;br /&gt;
* [[BaseType]]&lt;br /&gt;
* [[CraftOption]]&lt;br /&gt;
* [[CraftingType]]&lt;br /&gt;
* [[GunType]]&lt;br /&gt;
* [[JsonItemStack]]&lt;br /&gt;
* [[MArmorType]]&lt;br /&gt;
* [[PotionEffectEnum]]&lt;br /&gt;
* [[PotionEntry]]&lt;br /&gt;
* [[RecordType]]&lt;br /&gt;
* [[SeatInfo]]&lt;br /&gt;
* [[SkinType]]&lt;br /&gt;
* [[SoundEntry]]&lt;br /&gt;
* [[SoundType]]&lt;br /&gt;
* [[TankType]]&lt;br /&gt;
* [[VehicleType]]&lt;br /&gt;
* [[WeaponFireMode]]&lt;br /&gt;
* [[WeaponScopeType]]&lt;br /&gt;
* [[WeaponType]]&lt;br /&gt;
* [[EXWPack.info]]&lt;br /&gt;
&lt;br /&gt;
==== Model Reference ====&lt;br /&gt;
* [[ModelConfig]]&lt;br /&gt;
* [[ModelTransform]]&lt;br /&gt;
* [[TransformType]]&lt;br /&gt;
* [[Vector3f]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Template:Box&amp;diff=5</id>
		<title>Template:Box</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Template:Box&amp;diff=5"/>
		<updated>2026-06-04T04:24:52Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Created page with &amp;quot;{| width={{{WIDTH}}} style=&amp;quot;border: 0; background-color: #ffffff&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;3&amp;quot; | style=&amp;quot;width: {{{WIDTH}}}; vertical-align: top; border:1px solid {{{BORDER}}}; background-color: #ffffff&amp;quot; | &amp;lt;div style=&amp;quot;background-color:{{{BACKGROUND}}}; font-size:1px; height:8px; border-bottom:1px solid {{{BORDER}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;float:right; margin:7px; margin-top:5px&amp;quot;&amp;gt;{{{ICON}}}&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;padding:0.5em 0.3em 0.3em 0.3em; margin:0; text-indent:0.1em; fon...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width={{{WIDTH}}} style=&amp;quot;border: 0; background-color: #ffffff&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;3&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: {{{WIDTH}}}; vertical-align: top; border:1px solid {{{BORDER}}}; background-color: #ffffff&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:{{{BACKGROUND}}}; font-size:1px; height:8px; border-bottom:1px solid {{{BORDER}}};&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin:7px; margin-top:5px&amp;quot;&amp;gt;{{{ICON}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0.5em 0.3em 0.3em 0.3em; margin:0; text-indent:0.1em; font-weight: bold; border-bottom:1px solid #aaaaaa;&amp;quot;&amp;gt;{{{HEADING}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:100%; padding:3px&amp;quot;&amp;gt;&lt;br /&gt;
{|valign=top cellpadding=0 cellspacing=3 width=100%&lt;br /&gt;
|align=left valign=top width=100%|&lt;br /&gt;
{{{CONTENT}}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=4</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=4"/>
		<updated>2026-06-04T04:24:19Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Added index summary of all documentation pages.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Expansive Weaponry Documentation&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the new home of the Expansive Weaponry docs!&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [https://exw.rainyville.org/downloads Official website]&lt;br /&gt;
* [https://www.curseforge.com/minecraft/mc-mods/expansive-weaponry/ CurseForge]&lt;br /&gt;
&amp;lt;small&amp;gt;Please report any other downloads to the mod creators.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating a content pack ==&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
{{Box|&lt;br /&gt;
BORDER = #9999FF|&lt;br /&gt;
BACKGROUND = #99CCFF|&lt;br /&gt;
WIDTH = 100%|&lt;br /&gt;
ICON = |&lt;br /&gt;
HEADING = Expansive Weaponry Reference |&lt;br /&gt;
CONTENT =  &lt;br /&gt;
&lt;br /&gt;
The following is a list of all fields, default values, and descriptions for all applicable configurable content.&lt;br /&gt;
&lt;br /&gt;
* [[AmmoType]]&lt;br /&gt;
* [[ArmorInfo]]&lt;br /&gt;
* [[ArmorType]]&lt;br /&gt;
* [[AttachmentEnum]]&lt;br /&gt;
* [[BackpackInfo]]&lt;br /&gt;
* [[BaseType]]&lt;br /&gt;
* [[CraftOption]]&lt;br /&gt;
* [[CraftingType]]&lt;br /&gt;
* [[GunType]]&lt;br /&gt;
* [[JsonItemStack]]&lt;br /&gt;
* [[MArmorType]]&lt;br /&gt;
* [[PotionEffectEnum]]&lt;br /&gt;
* [[PotionEntry]]&lt;br /&gt;
* [[RecordType]]&lt;br /&gt;
* [[SeatInfo]]&lt;br /&gt;
* [[SkinType]]&lt;br /&gt;
* [[SoundEntry]]&lt;br /&gt;
* [[SoundType]]&lt;br /&gt;
* [[TankType]]&lt;br /&gt;
* [[VehicleType]]&lt;br /&gt;
* [[WeaponFireMode]]&lt;br /&gt;
* [[WeaponScopeType]]&lt;br /&gt;
* [[WeaponType]]&lt;br /&gt;
* [[EXWPack.info]]&lt;br /&gt;
&lt;br /&gt;
==== Model Reference ====&lt;br /&gt;
* [[ModelConfig]]&lt;br /&gt;
* [[ModelTransform]]&lt;br /&gt;
* [[TransformType]]&lt;br /&gt;
* [[Vector3f]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=3</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=3"/>
		<updated>2026-06-04T03:27:42Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Added future link for getting started.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Expansive Weaponry Documentation&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the new home of the Expansive Weaponry docs!&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [https://exw.rainyville.org/downloads Official website]&lt;br /&gt;
* [https://www.curseforge.com/minecraft/mc-mods/expansive-weaponry/ CurseForge]&lt;br /&gt;
&amp;lt;small&amp;gt;Please report any other downloads to the mod creators.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating a content pack ==&lt;br /&gt;
* [[Getting Started]]&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
	<entry>
		<id>http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://docs.exw.rainyville.org/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2026-06-04T03:22:38Z</updated>

		<summary type="html">&lt;p&gt;Unknown025: Updated main index page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Expansive Weaponry Documentation&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welcome to the new home of the Expansive Weaponry docs!&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [https://exw.rainyville.org/downloads Official website]&lt;br /&gt;
* [https://www.curseforge.com/minecraft/mc-mods/expansive-weaponry/ CurseForge]&lt;br /&gt;
&amp;lt;small&amp;gt;Please report any other downloads to the mod creators.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating a content pack ==&lt;br /&gt;
No documentation available yet.&lt;/div&gt;</summary>
		<author><name>Unknown025</name></author>
	</entry>
</feed>