Skip to content

Creating a custom pack

tsgscraft edited this page Sep 18, 2026 · 1 revision

Creating a custom pack

This is a full documentation of the custom pack format. This example creates the testPackV1, but with a different namespace. Instead of advancedclothing, this uses tutorial to make it clear, what is mod and what is your pack. When an element is not loaded correctly or not loaded at all, try looking in to the game logs and look for Failed to load... and read the message after.

Requirements

You need knowledge of json, resourcepack creation and the tools for that.

File structure

Here you can see the full file structure required for a clothing element.

First of all, the element are divided into 3+ json files and at least one png.

JSON File 1

<packname>\assets\<namespace>\clothing.json

Example:

{
  "clothing": [
    "tutorial:clothing/dress_1.json",
    "tutorial:clothing/dress_2.json",
    "tutorial:clothing/dress_3.json",
    "tutorial:clothing/dress_4.json"
  ]
}

In this file, you register all clothing elements with the clothing directory and .json extension

JSON File 2

<packname>\assets\<namespace>\clothing\<element_name>.json

Example:

{
  "name": "clothing.dress.dress_1",
  "type": "tutorial:dress",
  "slim_model": "turorial:models/clothing/dress/player_model_slim.json",
  "modifiers": {
    "second_layer": {
      "head": {
        "scale": [0.98, 0.98, 0.98]
      },
      "body": {
        "scale": [0.98, 0.98, 0.98]
      },
      "left_arm": {
        "scale": [0.98, 0.98, 0.98]
      },
      "right_arm": {
        "scale": [0.98, 0.98, 0.98]
      },
      "left_leg": {
        "scale": [0.98, 0.98, 0.98]
      },
      "right_leg": {
        "scale": [0.98, 0.98, 0.98]
      },
      "lboob": {
        "scale": [0.98, 0.98, 0.98]
      },
      "rboob": {
        "scale": [0.98, 0.98, 0.98]
      }
    }
  },
  "textures": [
    {
      "id": "#0",
      "location": "tutorial:textures/clothing/dress/slim_dress_1.png",
      "debug": "tutorial:textures/clothing/dress/alex.png",
      "width": 64,
      "height": 64
    }
  ]
}

name

The name field contains the translation string for easy localization.

type

The type field contains the clothing type, here tutorial:dress it can be anything the follows that format <namespace>:<type>. It also requires localization, the format is always advancedclothing.type.<namespace>.<type>.

model / slim_model

The model and slim_model fields contain the different model locations <namespace>:models/clothing/<model_file>.json for each player model respectively. (e.g. Steve model and Alex(slim) model, usefull for gloves, shirts or similar) You can leave one out and the other will applied on both slim and non slim players.

textures

The textures field is an array containing json objects:

  • id - the texture id defined in the model file
  • location - the texture location: <namespace>:textures/clothing/<texture>.png
  • width - the texture pixel width
  • height - the texture pixel height
  • debug - optional - a debug texture with the same format as above, this texture is used when the option debug is enabled.

modifiers

The modifiers field currently contains only an second_layer object to modify scale, offset and visible. scale and offset are arrays that contain 3 values for x, y, z. visible is a boolean to toggle the visibility. The second layer options are head, body, left_arm, right_arm, left_leg, right_leg, lboob and rboob. The lboob and rboob parts are parts of the Female Gender Mod by Wildfire, celeste and pupnewfster.

JSON File 3

<packname>\assets\<namespace>\models\clothing\<element_name>.json

Example (just a part (it would be to long)):

{
  "anchors": [
    {
      "anchor": "minecraft:head",
      "offset": [-8, 0, -8],
      "elements": [
        {
          "name": "Head",
          "from": [4, 0, 4],
          "to": [12, 8, 12],
          "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
          "faces": {
            "north": {"uv": [2, 2, 4, 4], "texture": "#0"},
            "east": {"uv": [0, 2, 2, 4], "texture": "#0"},
            "south": {"uv": [6, 2, 8, 4], "texture": "#0"},
            "west": {"uv": [4, 2, 6, 4], "texture": "#0"},
            "up": {"uv": [4, 2, 2, 0], "texture": "#0"},
            "down": {"uv": [6, 0, 4, 2], "texture": "#0"}
          }
        },
        {
          "name": "Hat Layer",
          "from": [3.1, -0.1, 3.1],
          "to": [12.1, 8.1, 12.1],
          "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
          "faces": {
            "north": {"uv": [10, 2, 12, 4], "texture": "#0"},
            "east": {"uv": [8, 2, 10, 4], "texture": "#0"},
            "south": {"uv": [14, 2, 16, 4], "texture": "#0"},
            "west": {"uv": [12, 2, 14, 4], "texture": "#0"},
            "up": {"uv": [12, 2, 10, 0], "texture": "#0"},
            "down": {"uv": [14, 0, 12, 2], "texture": "#0"}
          }
        }
      ]
    }
  ]
}

anchors

The anchors field is an array that contains anchor objects. The anchor objects are formatted as follows:

anchor

The anchor object contains one of the following anchor strings minecraft:head, minecraft:body, minecraft:left_arm, minecraft:right_arm, minecraft:left_leg, minecraft:right_leg, wildfire_gender:lboob and wildfire_gender:rboob to anchor the elements for easy animation on the player model.

offset

The offset field contains an array with the x, y, z offset in the model space of the elements.

elements

An array with the elements part of the 1.21.11+ vanilla model format. Supports rotation of both 1.21.11+ and 1.21.1 formats.