Repository navigation
Creating a ZIP Content Pack
This guide explains how to create a standalone content pack for the Minecraft instance's flan/ folder. You can develop it as an ordinary folder, then distribute it as a ZIP. Flan's Mod Ultimate and its normal dependencies must already be installed.
A ZIP pack needs no mod entrypoint, Forge/NeoForge mod metadata, or Java registration call. For a separate mod installed in mods/, follow Creating a Content Pack Mod instead. The two formats have different definition and model roots; renaming a packaged mod JAR to .zip does not convert it into this layout.
Create a folder named MyUniformPack outside the game directory. Enable File name extensions in Windows Explorer so that a definition does not accidentally become MyUniform.txt.txt. Save text files as UTF-8.
The example below adds one wearable coat. You need a compatible compiled Flan armor model, its matching armor texture, and an inventory icon. Reuse only material you have permission to redistribute. A texture alone does not contain the 3D model.
MyUniformPack/
armorFiles/
MyUniform.txt
com/
flansmod/
client/
model/
myuniformpack/
ModelExampleCoat.class
assets/
flansmod/
textures/
armor/
myuniformpack_coat_1.png
item/
myuniformpack_coat.png
models/
item/
myuniformpack_coat.json
lang/
en_us.json
pack.mcmeta
ModelExampleCoat.class is an illustrative model name: supply your own real compiled armor model and adapt both the path and the Model line below to its declared package and class name. Do not rename an arbitrary class to match the example.
Definitions go directly in type folders such as armorFiles/, guns/, bullets/, parts/, or vehicles/ at the pack root. A standalone ZIP does not use the mod-bundle flans_content/<pack>/definitions/ or flans_models/ wrapper folders. See Config Reference for other types and their parameters.
Create armorFiles/MyUniform.txt:
Name My Example Uniform
ShortName myuniformpack_coat
Model myuniformpack.ExampleCoat
Icon myuniformpack_coat
Colour 255 255 255
ArmourTexture myuniformpack_coat
Type Body
Defence 0
BulletDefence 0
ArmorPoints 0
Toughness 0
PenetrationResistance 1.00
This example uses the chest slot and gives no armor points or damage reduction. Choose appropriate protection values for your own content using the reference. No crafting recipe is included; use the command in step 7 to obtain it.
Prefix shortnames and resources with a distinctive pack name. Packs share the flansmod namespace. Keep the same shortname once you distribute an item, since saved items and other definitions can refer to it.
For Model myuniformpack.ExampleCoat, the usual model class is:
com.flansmod.client.model.myuniformpack.ModelExampleCoat
Place that class at com/flansmod/client/model/myuniformpack/ModelExampleCoat.class, relative to the pack root. The Model parameter omits the com.flansmod.client.model. prefix and the Model prefix on the simple class name. Some legacy packs use another supported package layout; preserve the actual class package rather than moving its bytes into a different package folder.
Use an armor model compatible with Flan's ModelCustomArmour framework, not a gun model or an unrelated Minecraft model. Include any additional model classes it depends on at their package paths. The installed mod supplies the shared Flan model framework; do not copy the entire old mod into your pack.
A .class file is compiled Java bytecode. Renaming .java to .class does not compile it. If you only have source, compile it against the matching mod/model API and Java target before distribution. The repository's model authoring notes describe the source layout used for Gradle builds. Current standalone loading also supports compiling Java model sources under com/ when Minecraft runs with a JDK containing a compiler, but shipping compatible compiled classes avoids requiring players to compile your model at startup. Classes compiled for a newer Java version cannot run on an older Java runtime.
For example, the existing John Smith coat uses:
Model wolffgermany.ObergruppenCommanderSmith
Its class belongs at com/flansmod/client/model/wolffgermany/ModelObergruppenCommanderSmith.class. If you are making a new texture for that model, keep this class identity and use your own shortname, icon name, and armor texture name. Shipping the model and its required assets makes the example independent of another content pack.
Copy the armor texture to assets/flansmod/textures/armor/myuniformpack_coat_1.png. Its UV layout and image dimensions must match the model. The John Smith model, for example, declares a 4096 × 2048 texture; this is not a universal size for armor models.
ArmourTexture myuniformpack_coat omits the extension and layer suffix. Body armor uses _1.png; leggings use _2.png. The folder is textures, with an s.
Place your inventory icon at assets/flansmod/textures/item/myuniformpack_coat.png. This is a separate image from the worn armor's UV texture. An existing suitable coat icon can be reused with permission.
Create assets/flansmod/models/item/myuniformpack_coat.json:
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "flansmod:item/myuniformpack_coat"
}
}The JSON filename matches ShortName. layer0 resolves below assets/flansmod/textures/, so it omits textures/ and .png. The item JSON controls the inventory appearance; the compiled Java model controls the worn armor.
Create assets/flansmod/lang/en_us.json:
{
"item.flansmod.myuniformpack_coat": "My Example Uniform"
}Additional languages use files such as de_de.json with the same translation key. JSON requires double quotes and no trailing comma after the last entry.
Create pack.mcmeta at the pack root:
{
"pack": {
"pack_format": 15,
"supported_formats": [15, 34],
"description": "My Uniform Pack"
}
}These metadata values follow the project's standalone resource metadata for Minecraft 1.20.1 and 1.21.1. They do not make model bytecode, APIs, or other version-dependent assets compatible automatically; test on each version you advertise.
Standalone packs can generate missing basic modern assets during preprocessing. Supplying the item model, icon, and translations explicitly makes this example's references easy to inspect. Keep your authored working copy separate: the loader may preprocess and repack installed archives. For details, see Content preprocessing and startup cache.
In Windows Explorer, open MyUniformPack, select its contents (armorFiles, com, assets, and pack.mcmeta), and compress those selected entries to a ZIP. Name it MyUniformPack.zip.
Open the ZIP in an archive viewer and check its first level:
MyUniformPack.zip
armorFiles/...
com/...
assets/...
pack.mcmeta
There must be no enclosing MyUniformPack/ directory inside the archive. Compressing the parent folder often adds this unwanted level. ZIP packaging itself needs no Gradle build; obtaining a compiled custom model may require one.
- Close Minecraft and locate the game directory of the instance you actually launch. A launcher profile can use a different directory from the default
.minecraft. - Copy
MyUniformPack.zipinto itsflan/folder, creating the folder if needed. If you configured a custom content-pack location, use that location instead. - Alternatively, install the unpacked working folder as
flan/MyUniformPack/armorFiles/.... Install one copy only. A folder takes precedence over a same-basename ZIP, so an old folder can hide a newly edited ZIP. - Start Minecraft with the matching Flan's Mod Ultimate version and dependencies. Content definitions are loaded at startup; restart after editing them.
- In a test world with cheats enabled, run
/give @s flansmod:myuniformpack_coat. - Check the inventory icon and translated name, equip the item in the chest slot, and inspect the worn model and texture in third person.
- Check the instance's
logs/latest.logfor definition, missing-resource, or class-loading errors. Test the exact distributed ZIP as well as your working folder.
For multiplayer, install the same pack and compatible main mod on the server and every client. Publish the required Minecraft and Flan's Mod Ultimate versions, any additional pack dependencies, credits, and redistribution terms alongside the ZIP. Remove the previous installed pack version when updating.
| Symptom | Check |
|---|---|
| Pack or item missing | Correct instance and content folder; armorFiles/ at ZIP root; actual .txt extension; startup log. |
| Changes seem ignored | Restart the game and remove an old installed folder or other duplicate pack. |
| Missing inventory texture |
Icon, PNG path under textures/item/, JSON under models/item/, and matching lowercase resource names. |
| Missing worn texture |
ArmourTexture base name, correct _1.png or _2.png suffix, and textures/armor/ path. |
| Distorted texture | The texture was drawn for another model or uses different dimensions/UV coordinates. |
| Missing or wrong armor geometry |
Model value, real class/package identity, compatible armor model, and additional required classes. |
UnsupportedClassVersionError |
Compile the model for the Java version required by your target game/mod version. |
| Translation key shown as the name | Valid en_us.json, matching item.flansmod.<shortname> key, and matching item ID. |