Skip to content
LlaGuiTo edited this page Sep 29, 2026 · 1 revision

Models

Differs between versions. Differences are marked below.

Ageforged Armor replaces the vanilla armor model for every set piece with its own custom 3D model and texture.

How the custom model system works

  • ModelProviderRegistry maps each item part (<set>_head, <set>_chest, <set>_legs, <set>_feet) to an ArmorModelProvider. Each provider supplies a baked model (a subclass of ArmorModel) and a LayerDefinition, registered client-side through AgeforgedArmorClient.
  • Each model part is built from ArmorModel.templateLayerDefinition(...), which creates the head, body, arms and legs used by the custom geometry.
  • Textures live under assets/ageforged_armor/textures/models/armor/. A set's base texture is <armor>.png; the slim variant is <armor>_slim.png. Skinned sets prefix the file name with the skin's texture prefix.
  • MixinHumanoidArmorLayer suppresses the vanilla armor piece for these items and submits the custom model instead, using the armorCutoutNoCull render type (with an armor glint overlay when the piece is enchanted).
  • MixinAvatarRenderer draws the chest armor on the first-person arm, so the custom model is visible in first person.

Body type ("preferred model")

The preferredModel option in the Configuration screen selects which model type is used:

  • MALE (default) uses the standard model.
  • FEMALE uses the slim model. The description warns that using the female model with a non-slim skin can cause visual issues.

The slim variant is chosen per player: for your own player the configured value is used; for other players the value synced from their client is used; if no synced value exists the code falls back to the player's own skin model (a "slim" skin selects the slim model). The choice and the skin are always visible to other players.

Skins

A skin changes only the texture used by a set; the model geometry stays the same. Selectable skins, by set:

Set Skins
O-Yoroi Default, Amber, Nightblue, Dusk, Ink, Jade, Pinky, Silver (Patreon tier 1), Amethyst (Patreon tier 4)
Raijin Default, Silver (Patreon tier 1), Crystal (Patreon tier 3)
Pharaoh Default, Silver (Patreon tier 1)
Centurion Default, Silver (Patreon tier 1)
Iron Plate Default, Ashes

Patreon skins are only selectable when the player's detected Patreon tier is high enough; otherwise the set falls back to its default texture. See Configuration for the Patreon category.

Animated models

The codebase includes AnimatedArmorModelProvider, which cycles through a numbered sequence of textures (<armor>_1.png, <armor>_2.png, ...) at a fixed number of ticks per frame. The currently shipped sets use the static and skinned providers, not the animated provider.

Version differences

26.1.2

  • ArmorModel extends HumanoidModel.
  • MixinHumanoidArmorLayer renders using the raw HumanoidRenderState and only skips the vanilla piece when the equipped item is a HumanoidArmorItem.
  • MixinAvatarRenderer targets the hand-render methods that take the player as an AbstractClientPlayer parameter.

26.2

  • ArmorModel extends PlayerModel and adds the empty placeholder parts PlayerModel requires (jacket, sleeves, pants). Because the vanilla armor models are PlayerModel instances too, animation mods that mix into PlayerModel.setupAnim() (for example PlayerAnimationLib, used by BetterCombat) now animate the custom armor as well.
  • MixinHumanoidArmorLayer can render on wearers that are not a real player, such as Armor Stands or the fake entity some mods use to preview a 3D item in a tooltip: for those it builds a throwaway AvatarRenderState carrying the same pose data and renders the custom model with it. So custom armor appears on Armor Stands and in 3D tooltip previews. "(26.2 only)"
  • MixinAvatarRenderer targets the hand-render methods that take an Avatar parameter (Minecraft 26.2 removed the AbstractClientPlayer parameter from that signature) and casts to a client player before drawing the first-person arm armor.

Everything else about the model system (providers, textures, body type, skins, first-person arm rendering) is the same in both versions.

Clone this wiki locally