-
-
Notifications
You must be signed in to change notification settings - Fork 0
Creating your first pack
Now that you understand the content pack architecture, let’s create your first pack step by step.
To get started, simply create a new folder inside the content-pack directory.
.minecraft/ # Or your launcher instance folder
├── content-pack/
└── your_pack_name/
⚠️ Important:
- Use only lowercase letters in folder names.
- Avoid spaces and special characters to prevent issues when loading your pack.
✅ Example folder name:
my_devil_pack_from_2025
- The JSONs file name are the object unique identifier, so use only lowercase letters, numbers, underscores (_) and hyphens (-). Plus we recommend to have a prefix/suffix related to your pack or name to avoid name conflicts with other packs (e.g.,
niwer_m4a1.json).
Once your folder is created, you’ll need to add a few essential files and directories to define your pack.
Create a file named pack.json inside your pack’s root folder.
Example:
{
"description": "My Content Pack made with love",
"version": "1.0.0", // Version of your pack
"compatibleVersions": "ALL", // Prevents the pack from loading on incompatible versions
"author": [ // List of authors
"Niwer_"
],
"tags": [ // Tags used to help users filter packs
"guns",
"s.c.p",
"zombies"
]
}You can manually create a pack.mcmeta file if you wish,
but the system will automatically generate one if it’s missing.
-
banner.png(Optional) Add abanner.png(or any supported image format) to visually represent your pack in the game’s interface.
Inside your pack folder, create the following directory structure:
your_pack_name/
└── assets/
└── niwer_engine/
The assets folder works exactly like a Minecraft resource pack —
you can override textures, models, and sounds from vanilla, other mods, or even other content packs.
Note for textures : We support multiple image formats including .png, .jpg, and .jpeg and even .webp for better compression. BUT we recommend using .png for maximum compatibility, the content-pack system will automatically convert other formats to a custom one (Based on WEBP).
Also we support texture that arn't multiple of 16, but for best results we recommend using power of two dimensions (e.g., 16x16, 32x32, 64x64, etc.).
When creating your content pack, you’ll frequently use the ItemStack, ContentPackSound, or Vector3 data types to define items and their quantities.
-
name :
String— The name of the item (should match an existing item in the game asmodid:item_name). E.G : "lemon", "niwer_engine:monster", "minecraft:apple". -
count :
Integer— The quantity of the item (must be greater than 0). -
and :
ItemStack— An additional ItemStack to combine with this one.
{
"name": "lemon",
"count": 5,
"and": {
"name": "minecraft:apple",
"count": 3
}
}-
referTo :
List<String>— List of sound names to refer to existing sounds defined elsewhere in the content pack. This is not used to create a sound but a list of multiple sound instance. (And each instance can have multiple sounds files if multiSound > 1) -
name :
String— The name of the sound. -
path :
String— The path to the sound file (without file extension), relative to theassets/niwer_engine/sounds/folder. -
category :
String— The sound category (e.g., "BLOCKS", "MUSIC", "RECORDS", "WEATHER", "HOSTILE", "NEUTRAL", "PLAYERS", "AMBIENT", "VOICE"). -
multiSound :
Integer— The number of different sound variations available for this sound. Will search for files with suffixes_1,_2, etc. -
volume :
Float— The volume of the sound (default is1.0). -
pitch :
Float— The pitch of the sound (default is1.0). -
chance :
Float— The chance (between0.0and1.0) of the sound being played when triggered (default is1.0). -
startDayTime :
Integer— The in-game time (in ticks) when the sound can start playing (default is-1). -
endDayTime :
Integer— The in-game time (in ticks) when the sound stops playing (default is-1). -
offsetX :
Float— The X offset for the sound position (default is0.0). -
offsetY :
Float— The Y offset for the sound position (default is0.0). -
offsetZ :
Float— The Z offset for the sound position (default is0.0).
{
"name": "entity.zombie.ambient",
"path": "entity/zombie/ambient",
"category": "HOSTILE",
"multiSound": 4
}-
x :
Float— The X coordinate. -
y :
Float— The Y coordinate. -
z :
Float— The Z coordinate.
{
"x": 10.5,
"y": 64.0,
"z": -23.3
}To add localized display names or descriptions for your items, entities, props, or other content pack elements, use the displayNames parameter with language codes as keys.
"displayNames": {
"en": "Health Potion",
"fr": "Potion de Santé",
"es": "Poción de Salud"
}This are the sub categories the item or prop belongs to (The boolean is deprecated and has no effect)
"categories": { "medicines": false }The space an item occupies in an inventory grid. In this example, the item occupies 2 slots in width and 1 slot in height.
"inventoryVolume": {
"x": 2,
"y": 1
}The storage capacity of an item that can hold other items (like backpacks or containers). In this example, the item can store items in a grid of 3 slots in width and 2 slots in height.
"storage": {
"x": 3,
"y": 2
}Every object that uses a 3D model (props, grenades, melee, firearms, vehicles, etc.) share common model parameters. See 3D Models and Animations for more details on how to use and configure 3D models and animations.
Once these basics are ready, you can start creating your items, entities, props, and more!
Continue with : creating a basic block
continue with : creating a basic item
continue with : creating a vehicle
continue with : creating a loot table