Skip to main content

Origins Furs

This mod is an addon for the Origins mod that adds custom furry models (furs) to origins.

File Location

Fur model JSON files are placed under:

assets/<namespace>/furs/<origin_name>.json

The filename corresponds to the origin's ID. For example, a fur for origins:avian would be located at assets/origins/furs/avian.json.

Naming & Namespaces

Avoiding Name Conflicts

If two origin packs define origins with the same name (e.g. both example1 and example2 have an origin called phantom), you can prefix the filename with the origin's namespace to prevent conflicts:

assets/<namespace>/furs/<origin_namespace>.<origin_name>.json

For example: assets/some_namespace/furs/example1.phantom.json and assets/some_namespace/furs/example2.phantom.json.

Origins Classes (Or other addons)

If you create a custom class with Origins Classes, the fur filename follows the format origins-classes.<class_name>.json. As always, including the namespace is recommended for redundancy.

Subfolders as Namespaces

If your origin is inside a subfolder (e.g. origins/roiraces/impact1/elf.json), the subfolder path acts as a namespace. You must use the full dotted path as the filename:

roiraces.impact1.elf.json

Omitting the namespace (in this case roiraces) will likely cause the fur to not load.

Reserved Namespace

The namespace orif-defaults is reserved. Furs using this namespace will not override existing ones.

Model Creation Tips

When creating a new model, if any cubes are zero-width (flat on any axis), make sure one face of that cube is fully transparent. This is required because translucency is supported, and non-transparent zero-width faces will cause rendering clipping.

JSON Format

FieldTypeDescription
modelResource LocationCustom GeckoLib model (.geo.json)
textureResource LocationMain texture for the model
fullbrightTextureResource LocationEmissive (fullbright) texture
animationResource LocationAnimation file, plays indefinitely
elytraTextureResource LocationCustom elytra texture for this origin
playerInvisibleBooleanIf true, hides the player's default model entirely
hiddenString[]Player body parts to hide. Valid values: head, hat, body, jacket, leftArm, rightArm, leftLeg, rightLeg, leftPants, rightPants
overlayResource LocationTexture drawn on top of the player's skin (Steve/wide model)
overlay_slimResource LocationSame as overlay, but for Alex/slim model. When defined, overlay is used exclusively for wide models
emissive_overlayResource LocationEmissive texture drawn on top of the player's skin (Steve/wide model)
emissive_overlay_slimResource LocationSame as emissive_overlay, but for Alex/slim model. When defined, emissive_overlay is used exclusively for wide models
rendering_offsetsObjectItem rendering position offsets
rendering_offsets.leftVec3Left arm item rendering offset [x, y, z]
rendering_offsets.rightVec3Right arm item rendering offset [x, y, z]

Example

{
"model": "some_namespace:geo/custommodel.geo.json",
"texture": "some_namespace:textures/custom/customorigin.png",
"fullbrightTexture": "some_namespace:textures/custom/customorigin_emission.png",
"animation": "some_namespace:animations/custommodel.animation.json",
"elytraTexture": "some_namespace:textures/custom/custom_elytra.png",
"playerInvisible": true,
"overlay": "some_namespace:textures/custom/skin_overlay.png",
"emissive_overlay": "some_namespace:textures/custom/emissive_skin_overlay.png",
"hidden": [
"leftArm", "rightArm", "body", "jacket",
"head", "hat", "leftLeg", "rightLeg",
"leftPants", "rightPants"
],
"rendering_offsets": {
"left": [0, 0.3, 0],
"right": [0, 0.3, 0]
}
}