Custom Player Models¶

sp614x with 2 CPMs active¶
Custom Player Models (CPM; sometimes called Special Cosmetics) is a feature that can modify player models. They are loaded on join and can be associated with a specific player.
CPMs are loaded from an online OptiFine server, but may also be specified to work with local files.

Available online CPMs can be chosen under the Cape Change menu.¶
CPMs cannot be bought and like Special capes, they are normally not available to normal donators.
Seasonal CPMs¶
Some CPMs are available to all donators during certain time periods.

Available CPMs can be chosen under the Cape Change menu. Here, the Halloween hat is available and enabled.¶
Christmas¶
Uses Santa Hat.
Date applied |
Date removed |
---|---|
2020/12/25 |
2021/01/01 |
2021/12/24 |
2022/01/01 |
2022/12/23 |
2023/01/01 |
2023/12/23 |
2024/01/01 |
2024/12/24 |
2025/01/01 |
Halloween¶
Uses Jingy Hat.
Date applied |
Date removed |
---|---|
2021/10/30 |
2021/11/07 |
2022/10/26 |
2022/11/07 |
2023/10/30 |
2023/11/08 |
2024/10/29 |
2024/11/07 |
List of online models¶
This is a list of all CPMs available from the OptiFine server.
Santa Hat¶
A santa hat.
ID:
hat_santa
Model file: https://optifine.net/items/hat_santa/model.cfg
Texture file: https://optifine.net/items/hat_santa/users/sp614x.png
{
"type" : "PlayerItem",
"texture": "optifine:textures/features/hat_santa.png",
"textureSize": [64, 32],
"models": [
{
"part": "santa_hat",
"id": "santa_hat",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "xy",
"translate": [0, 0, 0],
"rotate": [0, -90, 0],
"submodels": [
{
"id": "sant_hat_top2",
"invertAxis": "xy",
"translate": [0.53024, 10.61642, 0],
"rotate": [0, 0, -60],
"boxes": [
{"coordinates": [-0.5, 2, -1.5, 3, 3, 3], "textureOffset": [0, 0]}
]
},
{
"id": "sant_hat_top1",
"invertAxis": "xy",
"translate": [1.03024, 9.75039, 0],
"rotate": [0, 0, -50],
"boxes": [
{"coordinates": [-3, -1, -3, 6, 4, 6], "textureOffset": [0, 0]}
]
},
{
"id": "santa_hat_top0",
"invertAxis": "xy",
"translate": [0.2892, 8.72718, 0],
"rotate": [0, 0, -20],
"boxes": [
{"coordinates": [-4, -1, -4, 9, 3, 8], "textureOffset": [0, 0]}
]
},
{
"id": "sant_hat_top3",
"invertAxis": "xy",
"translate": [5.78024, 12.11642, 0],
"rotate": [0, 0, 15],
"boxes": [
{"coordinates": [-0.90192, -1.83013, -2, 4, 4, 4], "textureOffset": [0, 16]}
]
},
{
"id": "santa_hat_base",
"invertAxis": "xy",
"translate": [0.2892, 8.72718, 0],
"rotate": [0, 0, -15],
"boxes": [
{"coordinates": [-4.5, -3, -4.5, 10, 4, 9], "textureOffset": [0, 16], "sizeAdd": 0.1}
]
}
]
}
]
}
MrCheeze¶
Rings at the top and bottom of the head. It resembles the rings at the top of Lego blocks; MrCheeze's cape is a reference to Legos, as well as his skin and profile. The ID is the username of an OptiFine Discord moderator.
ID:
mrcheeze
Model file: https://optifine.net/items/mrcheeze/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
64
],
"models": [
{
"id": "tail",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "z",
"translate": [
0,
0,
0
],
"submodels": [
{
"part": "tail",
"id": "tail",
"invertAxis": "z",
"translate": [
0,
3.5,
-7.2
],
"rotate": [
-57,
0,
0
],
"boxes": [
{
"coordinates": [
-0.5,
-3,
-7.2,
1,
7,
1
],
"textureOffset": [
60,
20
]
}
]
},
{
"part": "tail2",
"id": "tail2",
"invertAxis": "z",
"translate": [
0,
-8.8,
-16.9
],
"rotate": [
-102.5,
0,
0
],
"boxes": [
{
"coordinates": [
-0.5,
4.5,
-22,
1,
6,
1
],
"textureOffset": [
60,
20
]
}
]
}
]
}
]
}
Jiingy Hat¶
A ushanka, a Russian hat. The ID is the username of an OptiFine Discord moderator.
ID:
jiingy
Model file: https://optifine.net/items/jiingy/model.cfg
Texture file: https://optifine.net/items/jiingy/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
62,
23
],
"models": [
{
"id": "Main",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "xy",
"translate": [
0,
0,
0
],
"rotate": [
5,
0,
0
],
"boxes": [
{
"coordinates": [
-5,
4.5,
-6,
10,
5,
5
],
"textureOffset": [
0,
0
]
},
{
"coordinates": [
-4.5,
3,
-2.5,
9,
6,
7
],
"textureOffset": [
0,
10
],
"sizeAdd": "0.1"
},
{
"coordinates": [
3.5,
0,
-1.5,
1,
3,
4
],
"textureOffset": [
30,
1
],
"sizeAdd": "0.1"
},
{
"coordinates": [
-4.5,
0,
-1.5,
1,
3,
4
],
"textureOffset": [
30,
1
],
"sizeAdd": "0.1"
}
]
}
]
}
Jiingy Scarf¶
A blue and white scarf. The ID is the username of an OptiFine Discord moderator.
ID:
jiingy_scarf
Model file: https://optifine.net/items/jiingy_scarf/model.cfg
Texture file: https://optifine.net/items/jiingy_scarf/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
62,
23
],
"models": [
{
"id": "Main",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "xy",
"translate": [
0,
0,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"coordinates": [
-5,
0,
-2.5,
10,
1,
5
],
"textureOffset": [
32,
10
]
},
{
"coordinates": [
-4,
-1,
-2.5,
8,
1,
5
],
"textureOffset": [
32,
17
]
},
{
"coordinates": [
1,
-6,
-2.5,
2,
5,
1
],
"textureOffset": [
41,
2
]
},
{
"coordinates": [
1,
-7,
-2.5,
1,
1,
1
],
"textureOffset": [
48,
6
]
}
]
}
]
}
Kai Ears¶
Cat ears. Likely for KaiAF, an OptiFine Discord moderator.
ID:
kai_ears
Model file: https://optifine.net/items/kai_ears/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
64
],
"models": [
{
"id": "ears",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "z",
"translate": [
0,
0,
0
],
"submodels": [
{
"part": "leftEar",
"id": "leftEar",
"invertAxis": "xy",
"translate": [
0,
0,
0
],
"rotate": [
0,
-180,
0
],
"boxes": [
{
"coordinates": [
2,
7.7,
-2,
1,
2,
3
],
"textureOffset": [
0,
0
]
}
]
},
{
"part": "rightEar",
"id": "rightEar",
"invertAxis": "xy",
"translate": [
0,
0,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"coordinates": [
2,
7.7,
-1,
1,
2,
3
],
"textureOffset": [
0,
0
]
}
]
}
]
}
]
}
Kai Tail¶
A cat's tail. Likely for KaiAF, an OptiFine Discord moderator.
ID:
kai_tail
Model file: https://optifine.net/items/kai_tail/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
64
],
"models": [
{
"id": "tail",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "z",
"translate": [
0,
0,
0
],
"submodels": [
{
"part": "tail",
"id": "tail",
"invertAxis": "z",
"translate": [
0,
3.5,
-7.2
],
"rotate": [
-57,
0,
0
],
"boxes": [
{
"coordinates": [
-0.5,
-3,
-7.2,
1,
7,
1
],
"textureOffset": [
60,
20
]
}
]
},
{
"part": "tail2",
"id": "tail2",
"invertAxis": "z",
"translate": [
0,
-8.8,
-16.9
],
"rotate": [
-102.5,
0,
0
],
"boxes": [
{
"coordinates": [
-0.5,
4.5,
-22,
1,
6,
1
],
"textureOffset": [
60,
20
]
}
]
}
]
}
]
}
Back Sword¶
An old Iron Sword at the player's back.
ID:
back_sword
Model file: https://optifine.net/items/back_sword/model.cfg
Texture file: https://optifine.net/items/back_sword/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"translate": [
-7,
2,
-4
],
"rotate": [
0,
0,
-90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Pickaxe¶
An old Iron Pickaxe at the player's back.
ID:
back_pickaxe
Model file: https://optifine.net/items/back_pickaxe/model.cfg
Texture file: https://optifine.net/items/back_pickaxe/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "u",
"translate": [
-7,
-14,
-4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Axe¶
An old Iron Axe at the player's back.
ID:
back_axe
Model file: https://optifine.net/items/back_axe/model.cfg
Texture file: https://optifine.net/items/back_axe/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "uv",
"translate": [
-8,
1,
-4
],
"rotate": [
0,
0,
-90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Quiver¶
A quiver at the player's back. Quivers are a remnant of Minecraft; the texture was removed in 1.9 snapshot 15w31a.
ID:
back_quiver
Model file: https://optifine.net/items/back_quiver/model.cfg
Texture file: https://optifine.net/items/back_quiver/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "u",
"translate": [
-8,
-13,
-4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Bow¶
This cosmetic has an old-textured Bow at the player's back.
ID:
back_bow
Model file: https://optifine.net/items/back_bow/model.cfg
Texture file: https://optifine.net/items/back_bow/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "uv",
"translate": [
-8,
2,
-4
],
"rotate": [
0,
0,
-90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Carrot on a Stick¶
An old Carrot on a Stick at the player's back.
ID:
back_carrot_stick
Model file: https://optifine.net/items/back_carrot_stick/model.cfg
Texture file: https://optifine.net/items/back_carrot_stick/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "u",
"translate": [
-7,
-14,
-4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Back Fishing Rod¶
An old Fishing Rod at the player's back.
ID:
back_fishing_rod
Model file: https://optifine.net/items/back_fishing_rod/model.cfg
Texture file: https://optifine.net/items/back_fishing_rod/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"mirrorTexture": "u",
"translate": [
-7,
-14,
-4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Body Boobs¶
ID:
body_boobs
Model file: https://optifine.net/items/body_boobs/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
32
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "z",
"translate": [
-4,
3,
1.9
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
20,
23
],
"coordinates": [
0,
0,
0,
8,
3,
1
]
}
]
}
]
}
Body Sword¶
An old Iron Sword at the player's front.
ID:
body_sword
Model file: https://optifine.net/items/body_sword/model.cfg
Texture file: https://optifine.net/items/body_sword/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "yz",
"translate": [
-1,
-6,
-14
],
"rotate": [
90,
-45,
90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Body Hearth¶
A heart at the player's chest. Hearth is likely to be a typo, intended to be heart.
ID:
body_hearth
Model file: https://optifine.net/items/body_hearth/model.cfg
Texture file: https://optifine.net/items/body_hearth/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Main",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "z",
"translate": [
-3,
3,
2.1
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
7,
6,
1
]
}
]
}
]
}
Arrow Hat¶
An arrow through the player's head.
ID:
hat_arrow
Model file: https://optifine.net/items/hat_arrow/model.cfg
Texture file: https://optifine.net/items/hat_arrow/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "SideA",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
5,
0
],
"rotate": [
-45,
0,
0
],
"scale": 0.75,
"boxes": [
{
"comment": "Tail",
"textureOffset": [
0,
5
],
"coordinates": [
-13,
-2.5,
0,
8,
5,
0
]
},
{
"comment": "Head",
"textureOffset": [
0,
0
],
"coordinates": [
5,
-2.5,
0,
8,
5,
0
]
}
]
},
{
"id": "SideB",
"baseId": "SideA",
"rotate": [
45,
0,
0
]
},
{
"id": "Back",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
5,
0
],
"rotate": [
45,
0,
0
],
"scale": 0.75,
"boxes": [
{
"comment": "Back (tex coord V is 5 instead of 10!)",
"textureOffset": [
0,
5
],
"coordinates": [
12,
-2.5,
-2.5,
0,
5,
5
]
}
]
}
]
}
Axe Hat¶
An axe through the player's head.
ID:
hat_axe
Model file: https://optifine.net/items/hat_axe/model.cfg
Texture file: https://optifine.net/items/hat_axe/users/sp614x.png
Error
Missing render
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"mirrorTexture": "",
"translate": [
-1,
-1,
-16
],
"rotate": [
90,
0,
90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Bee Antenna¶
A bee antenna coming out of the east side of the player's head.
ID:
hat_bee
Model file: https://optifine.net/items/hat_bee/model.cfg
Texture file: https://optifine.net/items/hat_bee/users/sp614x.png
{
"type": "PlayerItem",
"texture": "optifine:textures/features/hat_bee.png",
"textureSize": [
16,
16
],
"models": [
{
"id": "RightAntenna",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
2,
8,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"comment": "V",
"textureOffset": [
0,
0
],
"coordinates": [
-1,
0,
0,
1,
4,
1
]
},
{
"comment": "H",
"textureOffset": [
0,
5
],
"coordinates": [
0,
4,
0,
2,
1,
1
]
},
{
"comment": "Dot",
"textureOffset": [
4,
0
],
"coordinates": [
2,
3,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
3,
4,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
4,
3,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
3,
2,
0,
1,
1,
1
]
},
{
"comment": "DotCenter",
"textureOffset": [
4,
2
],
"coordinates": [
3,
3,
0,
1,
1,
1
]
}
]
},
{
"id": "LeftAntenna",
"baseId": "RightAntenna",
"invertAxis": "xyz",
"mirrorTexture": "u"
}
]
}
Jingy Hat¶
A modified Witch Hat, used for Halloween.
The name Jingy is misspelled; it is supposed to be Jiingy. The ID is a reference to Jiingy, an OptiFine Discord admin.
ID:
hat_jingy
Model file: https://optifine.net/items/hat_jingy/model.cfg
Texture file: https://optifine.net/items/hat_jingy/users/sp614x.png
{
"type": "PlayerItem",
"texture": "optifine:textures/features/hat_jingy.png",
"textureSize": [
96,
26
],
"models": [
{
"part": "witch_hat",
"type": "ModelBox",
"attachTo": "head",
"id": "witch_hat",
"invertAxis": "xy",
"translate": [
-2.372,
-23.5,
-8.5
],
"rotate": [
90,
72.5,
89.5
],
"submodels": [
{
"id": "Tip",
"invertAxis": "xy",
"translate": [
-2.3828,
40.3367,
2.1
],
"rotate": [
0,
-90,
50
],
"boxes": [
{
"coordinates": [
-1,
-1.5,
-1,
2,
3,
2
],
"textureOffset": [
75,
21
]
}
]
},
{
"id": "Top",
"invertAxis": "xy",
"translate": [
-0.2993,
37.9964,
2.1
],
"rotate": [
0,
-90,
37.5
],
"boxes": [
{
"coordinates": [
-2,
-2,
-2,
4,
4,
4
],
"textureOffset": [
58,
18
]
}
]
},
{
"id": "Middle",
"invertAxis": "xy",
"translate": [
0.5898,
35.475,
2.1
],
"rotate": [
0,
-90,
14.5
],
"boxes": [
{
"coordinates": [
-2.8999,
-2.3873,
-3,
6,
4,
6
],
"textureOffset": [
33,
16
]
}
]
},
{
"id": "Bottom2",
"invertAxis": "xy",
"translate": [
0.9,
33.05,
2.1
],
"rotate": [
0,
-90,
-3
],
"boxes": [
{
"coordinates": [
-4,
-1,
-4,
8,
2,
8
],
"textureOffset": [
0,
16
],
"sizeAdd": 0.1
}
]
},
{
"id": "Bottom1",
"invertAxis": "xy",
"translate": [
0.775,
31.4594,
2.1
],
"rotate": [
0,
-90,
-7.5
],
"boxes": [
{
"coordinates": [
-4.9348,
-1,
-5,
10,
2,
10
],
"textureOffset": [
56,
3
]
}
]
},
{
"id": "Base",
"invertAxis": "xy",
"translate": [
0.775,
30.9636,
2.1
],
"rotate": [
0,
0,
-7.5
],
"boxes": [
{
"coordinates": [
-7.00004,
-0.5136,
-7,
14,
0,
14
],
"textureOffset": [
0,
0
]
}
]
}
]
}
]
}
Link Hat¶
A prototype of the Santa Hat.
ID:
hat_link
Model file: https://optifine.net/items/hat_link/model.cfg
Texture file: https://optifine.net/items/hat_link/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
64,
64
],
"models": [
{
"id": "Level1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "y",
"translate": [
-5,
7,
-5
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
10,
3,
10
],
"sizeAdd": 0.1
}
],
"submodel": {
"comment": "Level2",
"invertAxis": "y",
"translate": [
1,
3,
1
],
"rotate": [
-20,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
13
],
"coordinates": [
0,
0,
0,
8,
4,
8
]
}
],
"submodel": {
"comment": "Level3",
"invertAxis": "y",
"translate": [
1,
4,
1
],
"rotate": [
-25,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
25
],
"coordinates": [
0,
0,
0,
6,
4,
6
]
}
],
"submodel": {
"comment": "Level4",
"invertAxis": "y",
"translate": [
0.5,
4,
0.5
],
"rotate": [
-40,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
35
],
"coordinates": [
0,
0,
0,
5,
4,
5
]
}
],
"submodel": {
"comment": "Level5",
"invertAxis": "y",
"translate": [
0.5,
4,
0.5
],
"rotate": [
-40,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
44
],
"coordinates": [
0,
0,
0,
4,
4,
4
]
}
],
"submodel": {
"comment": "Level6",
"invertAxis": "y",
"translate": [
0.5,
4,
0.5
],
"rotate": [
-35,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
52
],
"coordinates": [
0,
0,
0,
3,
5,
3
]
}
],
"submodel": {
"comment": "Level7",
"invertAxis": "y",
"translate": [
0.5,
5,
0.5
],
"rotate": [
-15,
0,
0
],
"boxes": [
{
"textureOffset": [
32,
13
],
"coordinates": [
0,
0,
0,
2,
5,
2
]
}
],
"submodels": [
{
"comment": "Level8",
"invertAxis": "y",
"translate": [
0.5,
5,
0.5
],
"rotate": [
-3,
0,
0
],
"boxes": [
{
"textureOffset": [
40,
0
],
"coordinates": [
0,
0,
0,
1,
4,
1
]
}
]
}
]
}
}
}
}
}
}
}
]
}
Pickaxe Hat¶
An old Iron Pickaxe through the player's head.
ID:
hat_pickaxe
Model file: https://optifine.net/items/hat_pickaxe/model.cfg
Texture file: https://optifine.net/items/hat_pickaxe/users/sp614x.png
Error
Missing render
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
1,
-14
],
"rotate": [
0,
-90,
0
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Reddit Hat¶
Similar to hat_bee
, except that the antenna is more centered, and the yellow dot is white.
It is intended to look like Snoo's (the alien-like mascot of Reddit) single antenna.
ID:
hat_reddit
Model file: https://optifine.net/items/hat_reddit/model.cfg
Texture file: https://optifine.net/items/hat_reddit/users/sp614x.png
{
"type": "PlayerItem",
"texture": "optifine:textures/features/hat_reddit.png",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
8,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"comment": "V",
"textureOffset": [
0,
0
],
"coordinates": [
-1,
0,
0,
1,
4,
1
]
},
{
"comment": "H",
"textureOffset": [
0,
5
],
"coordinates": [
0,
4,
0,
2,
1,
1
]
},
{
"comment": "Dot",
"textureOffset": [
4,
0
],
"coordinates": [
2,
3,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
3,
4,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
4,
3,
0,
1,
1,
1
]
},
{
"textureOffset": [
4,
0
],
"coordinates": [
3,
2,
0,
1,
1,
1
]
},
{
"comment": "DotCenter",
"textureOffset": [
4,
2
],
"coordinates": [
3,
3,
0,
1,
1,
1
]
}
]
}
]
}
Reindeer Antlers¶
Two reindeer antlers from the top of the player's head.
ID:
hat_reindeer
Model file: https://optifine.net/items/hat_reindeer/model.cfg
Texture file: https://optifine.net/items/hat_reindeer/users/sp614x.png
Error
Missing render
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
-8,
6,
0
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
6,
1
]
}
]
}
]
}
Shovel Hat¶
An old Iron Shovel in the player's head.
ID:
hat_shovel
Model file: https://optifine.net/items/hat_shovel/model.cfg
Texture file: https://optifine.net/items/hat_shovel/users/sp614x.png
Error
Missing render
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"mirrorTexture": "",
"translate": [
-1,
-3,
-15
],
"rotate": [
90,
0,
90
],
"sprites": [
{
"comment": "Axe",
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
}
]
}
Witch Hat¶
This cosmetic looks like the Vanilla Witch's hat. It is not the same as hat_jingy
.
ID:
hat_witch
Model file: https://optifine.net/items/hat_witch/model.cfg
Texture file: https://optifine.net/items/hat_witch/users/sp614x.png
{
"type": "PlayerItem",
"texture": "optifine:textures/features/hat_witch.png",
"textureSize": [
64,
64
],
"models": [
{
"id": "Level1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
7,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
0
],
"coordinates": [
-5,
0,
-5,
10,
2,
10
],
"sizeAdd": 0.1
}
]
},
{
"id": "Level2",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
8.75,
0
],
"rotate": [
-3,
0,
-1.5
],
"boxes": [
{
"textureOffset": [
0,
12
],
"coordinates": [
-3.5,
0,
-3.5,
7,
4,
7
]
}
]
},
{
"id": "Level3",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
12.5,
0
],
"rotate": [
-9,
0,
-4.5
],
"boxes": [
{
"textureOffset": [
0,
23
],
"coordinates": [
-2,
0,
-2,
4,
4,
4
]
}
]
},
{
"id": "Level4",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
0,
16.25,
0
],
"rotate": [
-21,
0,
-10.5
],
"boxes": [
{
"textureOffset": [
0,
31
],
"coordinates": [
-0.25,
0,
-1,
1,
2,
1
],
"sizeAdd": 0.25
}
]
}
]
}
Nose Up¶
A nose, raised up.
ID:
head_nose_up
Model file: https://optifine.net/items/head_nose_up/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
32
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
-1,
3,
4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
11,
13
],
"coordinates": [
0,
0,
0,
2,
1,
1
]
}
]
}
]
}
Nose Down¶
A nose, lowered down.
ID:
head_nose_up
Model file: https://optifine.net/items/head_nose_down/model.cfg
Texture file: Uses player's skin
{
"type": "PlayerItem",
"usePlayerTexture": true,
"textureSize": [
64,
32
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
-1,
2,
4
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
11,
13
],
"coordinates": [
0,
0,
0,
2,
1,
1
]
}
]
}
]
}
Villager Nose¶
A Villager's nose.
ID:
head_nose_villager
Model file: https://optifine.net/items/head_nose_villager/model.cfg
Texture file: https://optifine.net/items/head_nose_villager/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Level 1",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"translate": [
-1,
-1,
4
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
2,
4,
2
]
}
]
}
]
}
Mouse Ears¶
An mouse's ears in the player's head.
ID:
ears_mouse
Model file: https://optifine.net/items/ears_mouse/model.cfg
Texture file: https://optifine.net/items/ears_mouse/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
32,
32
],
"models": [
{
"id": "Main",
"type": "ModelBox",
"attachTo": "head",
"invertAxis": "yz",
"mirrorTexture": "",
"translate": [
0,
0,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"textureOffset": [
0,
0
],
"coordinates": [
2,
6,
0,
4,
4,
1
]
}
]
},
{
"id": "Second",
"type": "ModelBox",
"baseId": "Main",
"invertAxis": "xyz",
"mirrorTexture": "u"
}
]
}
Angel Wings¶
An angel's wings.
ID:
wings_angel
Model file: https://optifine.net/items/wings_angel/model.cfg
Texture file: https://optifine.net/items/wings_angel/users/sp614x.png
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "Main",
"type": "ModelBox",
"attachTo": "body",
"invertAxis": "",
"translate": [
1,
0,
3
],
"rotate": [
0,
0,
0
],
"sprites": [
{
"textureOffset": [
0,
0
],
"coordinates": [
0,
0,
0,
16,
16,
1
]
}
]
},
{
"id": "Other",
"baseId": "Main",
"attachTo": "body",
"invertAxis": "x",
"mirrorTexture": "u"
}
]
}
Wolverine Hand¶
Long "claws" coming out of the player's hand.
ID:
hand_wolverine
Model file: https://optifine.net/items/hand_wolverine/model.cfg
Texture file: https://optifine.net/items/hand_wolverine/users/sp614x.png
Error
Missing render
{
"type": "PlayerItem",
"textureSize": [
16,
16
],
"models": [
{
"id": "LeftHand",
"type": "ModelBox",
"attachTo": "leftArm",
"translate": [
0,
6.5,
0
],
"rotate": [
0,
0,
0
],
"boxes": [
{
"comment": "1",
"textureOffset": [
0,
0
],
"coordinates": [
2.4,
0,
-2,
1,
9,
1
],
"sizeAdd": -0.3
},
{
"comment": "2",
"textureOffset": [
0,
0
],
"coordinates": [
2.4,
0,
-0.5,
1,
9,
1
],
"sizeAdd": -0.3
},
{
"comment": "3",
"textureOffset": [
0,
0
],
"coordinates": [
2.4,
0,
1,
1,
9,
1
],
"sizeAdd": -0.3
}
]
},
{
"id": "RightHand",
"baseId": "LeftHand",
"attachTo": "rightArm",
"invertAxis": "x"
}
]
}
Technical details¶
After trying to load a player's cape, OptiFine will also check base + /users/USERNAME.cfg
,
where USERNAME
is the player's case-corrected username.
The term "base" refers to how OptiFine is loading the CPM, and thus where it's looking. CPMs may be loaded from 2 places:
Online
Important
Here, base is the URL
http://s.optifine.net
By default, OptiFine will load CPMs through the OptiFine website if local CPMs are not enabled. OptiFine will use the URL
http://s.optifine.net
as the 'base' for file locations and model references.Locally
Important
Here, base is the file path
.minecraft/playermodels
If enabled, OptiFine will load CPMs through files locally stored on your computer. Instead of querying a website, it will use your filesystem as the 'base' for file locations and model references.
Local CPMs are not enabled by default. To enable local CPMs:
Set
-Dplayer.models.local=true
in JVM Arguments.Create a
playermodels/
folder in your.minecraft
folder. Or, if you are using MultiMC, your instance's folder.
Warning
When local CPMs are enabled, online CPMs will not load.
If the path is to a valid JSON file, OptiFine will process it.
For each object in the root "items"
array, OptiFine will load the model referenced in "type"
.
Models are obtained from base + /items/TYPE/model.cfg
, where TYPE
is the value of key "type"
.
Next, if the model does not use the player's skin and does not specify a texture,
OptiFine will load that texture from base + items/TYPE/users/USERNAME.png
.
If a texture cannot be loaded, red wool replaces it.
Warning
Models with "usePlayerTexture": true
and "textureSize": [64, 32]
will not load correctly, as they depend on old 64 x 32 player skin sizes.
In summary, this structure is:
BASE/ (URL or local folder)
users/
USERNAME.cfg (what models a player has)
items/
MODEL/
model.cfg (the model)
users/
USERNAME.cfg (the model's texture for this player)
Limitations¶
CPMs have some limitations that may make them unsuitable for certain needs:
(local only) They cannot be in resource packs.
(local only) You can only target specific players by username.
They require OptiFine, and (local only) specific JVM arguments.
They are client-side, and (local only) other players will not see your own CPMs.
They do not support animations, as in Animation.
External links¶
Warning
These resources are not related to OptiDocs, but may provide some help.
JSON schema¶
{
"$schema": "http://json-schema.org/draft/2020-12/schema",
"$id": "https://gitlab.com/whoatemybutter/optifinedocs/-/blob/master/schemas/cpm_player.schema.json",
"title": "CPM Player CFG",
"type": "object",
"properties": {
"items": {
"type": "array",
"description": "The models available to this player.",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"active": {
"type": "string",
"pattern": "^(true|false)$"
},
"model": {
"$ref": "common.schema.json#/$defs/resource"
},
"texture": {
"$ref": "common.schema.json#/$defs/resource"
}
},
"required": ["type", "active"]
}
}
},
"required": ["items"],
"additionalProperties": false
}
{
"$schema": "http://json-schema.org/draft/2020-12/schema",
"$id": "https://gitlab.com/whoatemybutter/optifinedocs/-/blob/master/schemas/cpm_model.schema.json",
"title": "CPM model",
"type": "object",
"properties": {
"type": {
"const": "PlayerItem"
},
"usePlayerTexture": {
"type": "boolean"
},
"texture": {
"type": "string"
},
"textureSize": {
"type": "array",
"items": {
"type": "integer"
},
"minItems": 2,
"maxItems": 2,
"description": "Texture size (width, height) in pixels."
},
"model": {
"$ref": "#/$defs/model"
},
"models": {
"type": "array",
"items": {
"$ref": "#/$defs/model"
}
}
},
"required": [
"type",
"textureSize"
],
"allOf": [
{
"oneOf": [
{
"required": [
"model"
]
},
{
"required": [
"models"
]
}
]
},
{
"if": {
"properties": {
"usePlayerTextures": {
"const": true
}
},
"required": [
"usePlayerTextures"
]
},
"then": {
"not": {
"required": [
"texture"
]
}
}
}
],
"$defs": {
"model": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"const": "ModelBox"
},
"attachTo": {
"type": "string"
},
"baseId": {
"type": "string",
"minLength": 1
},
"invertAxis": {
"type": "string",
"maxLength": 3,
"pattern": "^([xyz])?((?!\\1)[xyz])?((?!\\1)(?!\\2)[xyz])?((?!\\1)(?!\\2)(?!\\3))?$",
"description": "Axes to invert; \"xyz\" inverts the X, Y, and Z axes, \"\" inverts none of them."
},
"translate": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": "number"
},
"description": "Translate texture by [0], [1], [2]."
},
"rotate": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": "number"
},
"description": "Rotate texture by [0], [1], [2]."
},
"sprites": {
"type": "array",
"items": {
"$ref": "#/$defs/uvBox"
}
},
"boxes": {
"type": "array",
"items": {
"$ref": "#/$defs/uvBox"
},
"description": "List of part model boxes."
},
"mirrorTexture": {
"type": "string",
"minLength": 1,
"maxLength": 2,
"pattern": "^([uv])?((?!\\1)[uv])?((?!\\1)(?!\\2)[uv])?$"
},
"submodel": {
"$ref": "#/$defs/model",
"description": "Submodel; attached to the parent, moving and rotating with it."
},
"submodels": {
"type": "array",
"description": "List of submodels; attached to the parent, moving and rotating with it.",
"items": {
"$ref": "#/$defs/model"
}
}
}
},
"uvBox": {
"type": "object",
"properties": {
"textureOffset": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2,
"maxItems": 2,
"description": "Texture offset for the box format."
},
"coordinates": {
"type": "array",
"minItems": 6,
"maxItems": 6,
"items": {
"type": "number"
},
"description": "Box position and dimensions. x, y, z, width, height, depth."
},
"sizeAdd": {
"type": "number",
"minimum": 0,
"maximum": 65535,
"description": "Size increment added to all dimensions; can be used for asymmetric scaling."
},
"sizesAdd": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"items": {
"type": "number",
"minimum": 0,
"maximum": 65535
},
"description": "Separate size increments can be used for asymmetric scaling."
}
}
}
}
}