├── OptiFineDoc ├── doc │ ├── examples │ │ ├── Emissive Textures │ │ │ ├── assets │ │ │ │ └── minecraft │ │ │ │ │ ├── optifine │ │ │ │ │ └── emissive.properties │ │ │ │ │ └── textures │ │ │ │ │ ├── block │ │ │ │ │ ├── gold_ore_e.png │ │ │ │ │ ├── diamond_ore_e.png │ │ │ │ │ ├── emerald_ore_e.png │ │ │ │ │ └── slime_block_e.png │ │ │ │ │ ├── item │ │ │ │ │ └── diamond_sword_e.png │ │ │ │ │ ├── entity │ │ │ │ │ └── zombie │ │ │ │ │ │ └── zombie_e.png │ │ │ │ │ └── trims │ │ │ │ │ └── models │ │ │ │ │ └── armor │ │ │ │ │ └── sentry_emerald_e.png │ │ │ ├── pack.png │ │ │ └── pack.mcmeta │ │ ├── Trident CIT │ │ │ ├── assets │ │ │ │ └── minecraft │ │ │ │ │ ├── optifine │ │ │ │ │ ├── cem │ │ │ │ │ │ ├── trident.jem │ │ │ │ │ │ ├── trident.properties │ │ │ │ │ │ ├── trident2.jem │ │ │ │ │ │ └── trident3.jem │ │ │ │ │ └── random │ │ │ │ │ │ └── entity │ │ │ │ │ │ ├── trident.properties │ │ │ │ │ │ └── trident2.png │ │ │ │ │ ├── models │ │ │ │ │ └── item │ │ │ │ │ │ ├── quindent.json │ │ │ │ │ │ ├── red_trident.json │ │ │ │ │ │ ├── red_trident_in_hand.json │ │ │ │ │ │ ├── quindent_throwing.json │ │ │ │ │ │ ├── trident_throwing.json │ │ │ │ │ │ ├── mjolnir_throwing.json │ │ │ │ │ │ ├── red_trident_throwing.json │ │ │ │ │ │ ├── trident_in_hand.json │ │ │ │ │ │ ├── mjolnir.json │ │ │ │ │ │ └── quindent_in_hand.json │ │ │ │ │ ├── textures │ │ │ │ │ ├── item │ │ │ │ │ │ ├── quindent.png │ │ │ │ │ │ └── red_trident.png │ │ │ │ │ └── entity │ │ │ │ │ │ └── trident │ │ │ │ │ │ ├── mjolnir.png │ │ │ │ │ │ ├── quindent.png │ │ │ │ │ │ └── red_trident.png │ │ │ │ │ ├── atlases │ │ │ │ │ └── blocks.json │ │ │ │ │ └── items │ │ │ │ │ └── trident.json │ │ │ ├── pack.png │ │ │ └── pack.mcmeta │ │ ├── CEM Animation Examples │ │ │ ├── pack.png │ │ │ ├── pack.mcmeta │ │ │ └── assets │ │ │ │ └── minecraft │ │ │ │ └── optifine │ │ │ │ └── cem │ │ │ │ ├── pig.jem │ │ │ │ ├── creeper.jem │ │ │ │ ├── husk.jem │ │ │ │ ├── panda.jem │ │ │ │ ├── skeleton.jem │ │ │ │ ├── zombie.jem │ │ │ │ ├── villager.jem │ │ │ │ ├── cow.jem │ │ │ │ ├── armor_stand.jem │ │ │ │ ├── wither_skeleton.jem │ │ │ │ ├── zombified_piglin.jem │ │ │ │ ├── piglin_brute.jem │ │ │ │ ├── allay.jem │ │ │ │ ├── piglin.jem │ │ │ │ └── spider.jem │ │ ├── Random Entity Textures │ │ │ ├── pack.png │ │ │ ├── assets │ │ │ │ └── minecraft │ │ │ │ │ └── optifine │ │ │ │ │ └── random │ │ │ │ │ └── entity │ │ │ │ │ ├── enderman │ │ │ │ │ ├── enderman.properties │ │ │ │ │ └── enderman2.png │ │ │ │ │ ├── slime │ │ │ │ │ ├── slime.properties │ │ │ │ │ └── slime2.png │ │ │ │ │ ├── chicken2.png │ │ │ │ │ ├── chicken3.png │ │ │ │ │ ├── chicken4.png │ │ │ │ │ ├── chicken5.png │ │ │ │ │ ├── chicken6.png │ │ │ │ │ ├── chicken7.png │ │ │ │ │ ├── chicken8.png │ │ │ │ │ ├── cow │ │ │ │ │ ├── temperate_cow10.png │ │ │ │ │ ├── temperate_cow11.png │ │ │ │ │ ├── temperate_cow2.png │ │ │ │ │ ├── temperate_cow3.png │ │ │ │ │ ├── temperate_cow4.png │ │ │ │ │ ├── temperate_cow5.png │ │ │ │ │ ├── temperate_cow6.png │ │ │ │ │ ├── temperate_cow7.png │ │ │ │ │ ├── temperate_cow8.png │ │ │ │ │ └── temperate_cow9.png │ │ │ │ │ └── chicken.properties │ │ │ └── pack.mcmeta │ │ └── README.md │ ├── images │ │ ├── skybox.png │ │ ├── cem_box.png │ │ ├── ctm_template.png │ │ ├── overlay_template.png │ │ ├── biome_grid_template.png │ │ ├── horizontal_template.png │ │ ├── lightmap_template.png │ │ ├── vertical_template.png │ │ └── ctm_compact_template.png │ ├── natural.properties │ ├── todo.txt │ ├── debug_keys.txt │ ├── texture.properties │ ├── README.md │ ├── dynamic_lights.properties │ ├── bettergrass.properties │ ├── block.properties │ ├── system_properties.txt │ ├── emissive.properties │ ├── loading.properties │ ├── background.properties │ ├── hd_fonts.txt │ ├── cit.properties │ ├── custom_animations.txt │ ├── custom_lightmaps.txt │ ├── colormap.properties │ ├── cem_part.txt │ ├── custom_guis.properties │ ├── biome_palettes_grid.txt │ ├── sky.properties │ ├── random_entities.properties │ ├── properties_files.txt │ ├── biome_palettes.txt │ ├── cem_animation.txt │ ├── color.properties │ └── ctm.properties ├── .settings │ └── org.eclipse.core.resources.prefs └── assets │ └── minecraft │ └── optifine │ └── lang │ ├── README.md │ └── en_gb.lang └── .github └── ISSUE_TEMPLATE ├── feature_request.md └── bug_report.md /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/optifine/emissive.properties: -------------------------------------------------------------------------------- 1 | suffix.emissive=_e -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/cem/trident.jem: -------------------------------------------------------------------------------- 1 | { 2 | "models": [] 3 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/skybox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/skybox.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/cem_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/cem_box.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/natural.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/natural.properties -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/ctm_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/ctm_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/overlay_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/overlay_template.png -------------------------------------------------------------------------------- /OptiFineDoc/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//assets/minecraft/optifine/lang=UTF-8 3 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/pack.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/biome_grid_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/biome_grid_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/horizontal_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/horizontal_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/lightmap_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/lightmap_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/vertical_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/vertical_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/random/entity/trident.properties: -------------------------------------------------------------------------------- 1 | textures.1=2 2 | name.1=regex:Red Trident|red trident -------------------------------------------------------------------------------- /OptiFineDoc/doc/images/ctm_compact_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/images/ctm_compact_template.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/pack.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/CEM Animation Examples/pack.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/pack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/pack.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "Trident CIT examples", 4 | "min_format": 69, 5 | "max_format": 69 6 | } 7 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/enderman/enderman.properties: -------------------------------------------------------------------------------- 1 | textures.1=2 2 | nbt.1.carriedBlockState.Name=minecraft:grass_block -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/quindent.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "item/quindent" 5 | } 6 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/cem/trident.properties: -------------------------------------------------------------------------------- 1 | models.1=2 2 | name.1=regex:Quindent|quindent 3 | 4 | models.2=3 5 | name.2=regex:Mjolnir|mjolnir -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "Emissive texture examples", 4 | "min_format": 69, 5 | "max_format": 69 6 | } 7 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/red_trident.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "item/red_trident" 5 | } 6 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "Random entity texture examples", 4 | "min_format": 69, 5 | "max_format": 69 6 | } 7 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "Examples for CEM Animation", 4 | "min_format": 69, 5 | "max_format": 69 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/item/quindent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/item/quindent.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/item/red_trident.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/item/red_trident.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/slime/slime.properties: -------------------------------------------------------------------------------- 1 | textures.1=2 2 | biomes.1=jungle bamboo_jungle ocean 3 | 4 | textures.2=1 2 5 | weights.2=9 1 6 | biomes.2=swamp -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/gold_ore_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/gold_ore_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/random/entity/trident2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/random/entity/trident2.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/mjolnir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/mjolnir.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/quindent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/quindent.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/diamond_ore_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/diamond_ore_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/emerald_ore_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/emerald_ore_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/slime_block_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/block/slime_block_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/item/diamond_sword_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/item/diamond_sword_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/red_trident.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/textures/entity/trident/red_trident.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/entity/zombie/zombie_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/entity/zombie/zombie_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken2.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken3.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken4.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken5.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken6.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken7.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken8.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/slime/slime2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/slime/slime2.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/trims/models/armor/sentry_emerald_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Emissive Textures/assets/minecraft/textures/trims/models/armor/sentry_emerald_e.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow10.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow11.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow2.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow3.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow4.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow5.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow6.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow7.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow8.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/cow/temperate_cow9.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/enderman/enderman2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sp614x/optifine/HEAD/OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/enderman/enderman2.png -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/red_trident_in_hand.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/trident_in_hand", 4 | "textures": { 5 | "trident": "entity/trident/red_trident", 6 | "particle": "item/red_trident" 7 | } 8 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for OptiFine 4 | title: "[Category] Short description" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Description of the new feature 11 | 12 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/todo.txt: -------------------------------------------------------------------------------- 1 | Not implemented MCPatcher features: 2 | 3 | Connected textures 4 | - innerSeams 5 | - renderpass 6 | 7 | Custom Items 8 | - method 9 | - cap 10 | - fade 11 | 12 | Random Mobs 13 | - redcow_overlay 14 | - snowman_overlay 15 | 16 | Other 17 | - line.properties 18 | - renderpass.properties 19 | - compass.properties 20 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/atlases/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "sources": [ 3 | { 4 | "type": "single", 5 | "resource": "entity/trident", 6 | "sprite": "entity/trident" 7 | }, 8 | { 9 | "type": "directory", 10 | "prefix": "entity/trident/", 11 | "source": "entity/trident" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/debug_keys.txt: -------------------------------------------------------------------------------- 1 | F3 + K = load all visible chunks 2 | F3 + O = shader options 3 | F3 + R = reload shaders 4 | 5 | # Chunk debug keys, see system property "chunk.debug.keys" 6 | F3 + E = chunk path 7 | F3 + L = smart cull 8 | F3 + U = capture frustum 9 | Alt + F3 + U = capture shadow frustum 10 | Shift + F3 + U = release frustum 11 | F3 + V = chunk visibility 12 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/quindent_throwing.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/quindent_in_hand", 4 | "display": { 5 | "thirdperson_righthand": { 6 | "rotation": [0, 90, 180], 7 | "translation": [8, 10, 9] 8 | }, 9 | "thirdperson_lefthand": { 10 | "rotation": [0, 90, 180], 11 | "translation": [8, 10, -7] 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/trident_throwing.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/trident_in_hand", 4 | "display": { 5 | "thirdperson_righthand": { 6 | "rotation": [0, 90, 180], 7 | "translation": [8, 10, 9] 8 | }, 9 | "thirdperson_lefthand": { 10 | "rotation": [0, 90, 180], 11 | "translation": [8, 10, -7] 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/mjolnir_throwing.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/mjolnir", 4 | "display": { 5 | "firstperson_righthand": { 6 | "rotation": [0, -90, -100], 7 | "translation": [-3, -7.5, -12.4] 8 | }, 9 | "firstperson_lefthand": { 10 | "rotation": [0, 90, 100], 11 | "translation": [13, -7.5, -12.4] 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/red_trident_throwing.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/red_trident_in_hand", 4 | "display": { 5 | "thirdperson_righthand": { 6 | "rotation": [0, 90, 180], 7 | "translation": [8, 10, 9] 8 | }, 9 | "thirdperson_lefthand": { 10 | "rotation": [0, 90, 180], 11 | "translation": [8, 10, -7] 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /OptiFineDoc/assets/minecraft/optifine/lang/README.md: -------------------------------------------------------------------------------- 1 | # Translations 2 | 3 | > [!TIP] 4 | > Subscribe to updates in the English language file using [this RSS feed](https://github.com/sp614x/optifine/commits/master/OptiFineDoc/assets/minecraft/optifine/lang/en_us.lang.atom) 5 | 6 | ## Create new or update existing translations 7 | 8 | - Name any new files using the appropriate [in-game locale code](https://minecraft.wiki/w/Language#Languages) for your language 9 | - Test your translation in a resource pack by placing it inside the folder "assets/minecraft/optifine/lang" 10 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Random Entity Textures/assets/minecraft/optifine/random/entity/chicken.properties: -------------------------------------------------------------------------------- 1 | textures.1=2 2 | name.1=Cluckshroom 3 | 4 | textures.2=3 5 | name.2=ipattern:amber chicken 6 | 7 | textures.3=4 8 | name.3=ipattern:*bronzed* 9 | 10 | textures.4=5 11 | name.4=iregex:.*gold crested.* 12 | 13 | textures.5=6 14 | name.5=iregex:midnight|midnight chicken|5 15 | 16 | textures.6=7 17 | name.6=iregex:skewbald|skewbald chicken|6 18 | 19 | textures.7=8 20 | name.7=iregex:stormy|stormy chicken|7 21 | 22 | textures.8=1 2 3 4 5 6 7 8 23 | weights.8=5 1 5 5 5 5 5 1 -------------------------------------------------------------------------------- /OptiFineDoc/doc/texture.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for texture properties 3 | # Location: /assets/minecraft/optifine/texture.properties 4 | ############################################################################### 5 | 6 | # Format 7 | # Texture format used for normal and specular shader textures 8 | # LabPbr: https://github.com/rre36/lab-pbr/wiki 9 | # See "shaders.txt", Standard Macros, Textures 10 | format=lab-pbr/1.3 11 | 12 | # Alpha cutout 13 | # Pixels with alpha value below the cutout will be treated as fully transparent (alpha 0) 14 | # Valid values are 1 to 255. 15 | alpha.cutout=16 -------------------------------------------------------------------------------- /OptiFineDoc/doc/README.md: -------------------------------------------------------------------------------- 1 | # Update to 1.13 2 | 3 | ## Resource packs 4 | 5 | - Rename folder "assets/minecraft/mcpatcher" to "assets/minecraft/optifine" 6 | - In all ".properties" files replace references to "assets/minecraft/mcpatcher" with "assets/minecraft/optifine" 7 | - Replace all numeric IDs (blocks, items, enchantments, etc.) with [names](https://minecraft.wiki/w/Java_Edition_1.13/Flattening) 8 | 9 | ## Shader packs 10 | 11 | - Add mappings for all numeric IDs used in the shader ([blocks](https://github.com/sp614x/optifine/blob/master/OptiFineDoc/doc/shaders.txt#L487), [items](https://github.com/sp614x/optifine/blob/master/OptiFineDoc/doc/shaders.txt#L528), [entities](https://github.com/sp614x/optifine/blob/master/OptiFineDoc/doc/shaders.txt#L543), etc.) 12 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/dynamic_lights.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Dynamic Lights feature. 3 | ############################################################################### 4 | # dynamic_lights.properties 5 | ############################################################################### 6 | # This file is offered without any copyright restrictions. 7 | # Please copy and modify it to suit your needs. 8 | # 9 | # This configuration file allows mods to define dynamic light levels for entities and items. 10 | # Location: "/assets//optifine/dynamic_lights.properties" 11 | 12 | # Entity light levels 13 | # The entity name is automatically expanded with the mod_id. 14 | # The light level should be between 0 and 15. 15 | # For exaple: 16 | # entities=basalz:15 blitz:7 17 | entities= ... 18 | 19 | # Item light levels 20 | # The item name is automatically expanded with the mod_id. 21 | # The light level should be between 0 and 15. 22 | # For exaple: 23 | # items=florb:15 morb:7 24 | items= ... 25 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/bettergrass.properties: -------------------------------------------------------------------------------- 1 | # Configuration for OptiFine's Better Grass feature 2 | # Location: /assets/minecraft/optifine/bettergrass.properties 3 | 4 | # Blocks 5 | # Enable Better Grass for specific blocks 6 | grass=true 7 | dirt_path=true 8 | mycelium=true 9 | podzol=true 10 | crimson_nylium=true 11 | warped_nylium=true 12 | 13 | # Snowy blocks 14 | # Enable Better Grass for specific blocks which have snow on top 15 | grass.snow=true 16 | mycelium.snow=true 17 | podzol.snow=true 18 | 19 | # Multilayer grass sides 20 | # - layer 1 = grass_side 21 | # - layer 2 = grass (colored by biome) 22 | # Allows transparent grass texture to be used as overlay for the grass side 23 | grass.multilayer=false 24 | 25 | # Textures 26 | # Configure which textures to be used 27 | # The "texture.grass" is colored by biome 28 | texture.grass=block/grass_block_top 29 | texture.grass_side=block/grass_block_side 30 | texture.dirt_path=block/dirt_path_top 31 | texture.dirt_path_side=block/dirt_path_side 32 | texture.mycelium=block/mycelium_top 33 | texture.podzol=block/podzol_top 34 | texture.crimson_nylium=block/crimson_nylium 35 | texture.warped_nylium=block/warped_nylium 36 | texture.snow=block/snow 37 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/block.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Blocks feature. 3 | ############################################################################### 4 | # block.properties 5 | ############################################################################### 6 | # This file is offered without any copyright restrictions. 7 | # Please copy and modify it to suit your needs. 8 | # 9 | # Location: "/assets/minecraft/optifine/block.properties" 10 | # 11 | 12 | # Render layer (optional) 13 | # Defines custom render layer for the given blocks 14 | # Layers 15 | # solid - no alpha, no blending (solid textures) 16 | # cutout - alpha, no blending (cutout textures) 17 | # cutout_mipped - alpha, no blending, mipmaps (cutout with mipmaps) 18 | # translucent - alpha, blending, mipmaps (water, stained glass) 19 | # 20 | # Blocks which are solid opaque cubes (stone, dirt, ores, etc) can't be rendered on a custom layer 21 | # as this would affect face culling, ambient occlusion, light propagation and so on. 22 | # 23 | # For exaple: 24 | # layer.translucent=glass_pane fence wooden_door 25 | # 26 | layer.solid= 27 | layer.cutout= 28 | layer.cutout_mipped= 29 | layer.translucent= 30 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/system_properties.txt: -------------------------------------------------------------------------------- 1 | ================================== 2 | System properties used by OptiFine 3 | ================================== 4 | 5 | The system properties have to be added in the field "JVM Arguments" in the launcher profile. 6 | For example to enable extended logging add "-Dlog.detail=true" to the JVM arguments. 7 | 8 | # Enable extended logging 9 | log.detail= 10 | 11 | # Save the final texture map in the folder "debug" 12 | saveTextureMap= 13 | 14 | # Save the final shader sources in the folder "shaderpacks/debug" 15 | shaders.debug.save= 16 | 17 | # Automatically animate all mob models 18 | # Useful when testing custom entity models 19 | animate.model.living= 20 | 21 | # Load the player models from the folder "playermodels" 22 | player.models.local= 23 | 24 | # Automatically reload the player models every 5 sec. 25 | # Useful when testing a custom local player model 26 | player.models.reload= 27 | 28 | # Show frame time (ms) instead of FPS 29 | frame.time= 30 | 31 | # OpenGL debug groups 32 | gl.debug.groups= 33 | 34 | # Ignore OpenGL errors 35 | # - comma separated list of error ids 36 | gl.ignore.errors= 37 | 38 | # CEM debug models 39 | # Automatically generate CEM models for all supported entities using different colors for each model part 40 | # The part names and colors are written in the log 41 | cem.debug.models= 42 | 43 | # Chunk debug keys 44 | # Enable chunk debug keys, see "debug_keys.txt" 45 | chunk.debug.keys= 46 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/pig.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "body", 7 | "id": "body", 8 | "invertAxis": "xy", 9 | "translate": [0, -13, -2], 10 | "rotate": [-90, 0, 0] 11 | }, 12 | { 13 | "part": "head", 14 | "id": "head", 15 | "invertAxis": "xy", 16 | "translate": [0, -12, 6], 17 | "submodels": [ 18 | { 19 | "id": "spin", 20 | "invertAxis": "xy", 21 | "translate": [0, 12, -10], 22 | "boxes": [ 23 | {"coordinates": [-2, -3, -5, 4, 3, 1], "textureOffset": [16, 16]}, 24 | {"coordinates": [-4, -4, -4, 8, 8, 8], "textureOffset": [0, 0]} 25 | ] 26 | } 27 | ], 28 | "animations": [ 29 | { 30 | "var.counter": "var.counter + 1 * frame_time" 31 | }, 32 | { 33 | "spin.rz": "var.counter" 34 | } 35 | ] 36 | }, 37 | { 38 | "part": "leg1", 39 | "id": "leg1", 40 | "invertAxis": "xy", 41 | "translate": [-3, -6, -7] 42 | }, 43 | { 44 | "part": "leg2", 45 | "id": "leg2", 46 | "invertAxis": "xy", 47 | "translate": [3, -6, -7] 48 | }, 49 | { 50 | "part": "leg3", 51 | "id": "leg3", 52 | "invertAxis": "xy", 53 | "translate": [-3, -6, 5] 54 | }, 55 | { 56 | "part": "leg4", 57 | "id": "leg4", 58 | "invertAxis": "xy", 59 | "translate": [3, -6, 5] 60 | } 61 | ] 62 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/emissive.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Emissive Textures feature. 3 | ############################################################################### 4 | # emissive.properties 5 | # This file should be placed in the resource pack folder "assets/minecraft/optifine" 6 | ############################################################################### 7 | ############################################################################### 8 | # Emissive textures 9 | ############################################################################### 10 | # It is possible to add overlays to block textures, which will always rendered 11 | # with full brightness. This can simulate light emitting parts of the textures. 12 | # The emissive overlays have the same name as the base texture + custom suffix. 13 | # For example: 14 | # bedrock.png - base texture 15 | # bedrock_e.png - emissive overlay 16 | # The emissive overlays are rendered in the same block layer as the base texture, 17 | # except overlays for textures from layer SOLID, which are rendered as CUTOUT_MIPPED. 18 | # The overlays can also be used for items, mobs and block entities. 19 | suffix.emissive=_e 20 | 21 | # Armor trims 22 | # Emmisive armor trim textures are defined by adding one of the following material suffixes 23 | # to the trim base name: amethyst, copper, diamond, diamond_darker, emerald, gold, gold_darker, 24 | # iron, iron_darker, lapis, netherite, netherite_darker, quartz, redstone. 25 | # For example: 26 | # coast_amethyst_e.png, host_iron_darker_e.png, dune_leggings_netherite_e.png 27 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/creeper.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -18, 0] 10 | }, 11 | { 12 | "part": "body", 13 | "id": "body", 14 | "invertAxis": "xy", 15 | "translate": [0, -18, 0], 16 | "submodels": [ 17 | { 18 | "id": "cancel", 19 | "invertAxis": "xy", 20 | "translate": [0, 22, 0], 21 | "submodels": [ 22 | { 23 | "id": "rotate", 24 | "invertAxis": "xy", 25 | "translate": [0, 0, 0], 26 | "boxes": [ 27 | { 28 | "coordinates": [-4, -4, 0, 8, 8, 0], 29 | "uvNorth": [8, 8, 16, 16] 30 | } 31 | ] 32 | } 33 | ] 34 | } 35 | ], 36 | "animations": [ 37 | { 38 | "cancel.ry": "-rot_y + torad(180)", 39 | "rotate.rx": "-player_rot_x", 40 | "rotate.ry": "player_rot_y" 41 | } 42 | ] 43 | }, 44 | { 45 | "part": "leg1", 46 | "id": "leg1", 47 | "invertAxis": "xy", 48 | "translate": [-2, -6, -4] 49 | }, 50 | { 51 | "part": "leg2", 52 | "id": "leg2", 53 | "invertAxis": "xy", 54 | "translate": [2, -6, -4] 55 | }, 56 | { 57 | "part": "leg3", 58 | "id": "leg3", 59 | "invertAxis": "xy", 60 | "translate": [-2, -6, 4] 61 | }, 62 | { 63 | "part": "leg4", 64 | "id": "leg4", 65 | "invertAxis": "xy", 66 | "translate": [2, -6, 4] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/husk.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0], 10 | "submodels": [ 11 | { 12 | "id": "slide", 13 | "invertAxis": "xy", 14 | "translate": [0, 0, 0], 15 | "boxes": [ 16 | {"coordinates": [-4, 24, -4, 8, 8, 8], "textureOffset": [0, 0]} 17 | ] 18 | } 19 | ], 20 | "animations": [ 21 | { 22 | "var.speed": "time * random(id)", 23 | "var.distance": "1 + random(id + 1) * 10" 24 | }, 25 | { 26 | "slide.tx": "sin(var.speed) * var.distance" 27 | } 28 | ] 29 | }, 30 | { 31 | "part": "headwear", 32 | "id": "headwear", 33 | "invertAxis": "xy", 34 | "translate": [0, -24, 0] 35 | }, 36 | { 37 | "part": "body", 38 | "id": "body", 39 | "invertAxis": "xy", 40 | "translate": [0, -24, 0] 41 | }, 42 | { 43 | "part": "left_arm", 44 | "id": "left_arm", 45 | "invertAxis": "xy", 46 | "mirrorTexture": "u", 47 | "translate": [5, -22, 0] 48 | }, 49 | { 50 | "part": "right_arm", 51 | "id": "right_arm", 52 | "invertAxis": "xy", 53 | "translate": [-5, -22, 0] 54 | }, 55 | { 56 | "part": "left_leg", 57 | "id": "left_leg", 58 | "invertAxis": "xy", 59 | "mirrorTexture": "u", 60 | "translate": [1.9, -12, 0] 61 | }, 62 | { 63 | "part": "right_leg", 64 | "id": "right_leg", 65 | "invertAxis": "xy", 66 | "translate": [-1.9, -12, 0] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/panda.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -12.5, 17], 10 | "submodels": [ 11 | { 12 | "id": "spin", 13 | "invertAxis": "xy", 14 | "translate": [0, 12.5, -16.5], 15 | "boxes": [ 16 | {"coordinates": [-6.5, -5, -4.5, 13, 10, 9], "textureOffset": [0, 6]}, 17 | {"coordinates": [-3.5, -5, -6.5, 7, 5, 2], "textureOffset": [45, 16]}, 18 | {"coordinates": [3.5, 4, -1.5, 5, 4, 1], "textureOffset": [52, 25]}, 19 | {"coordinates": [-8.5, 4, -1.5, 5, 4, 1], "textureOffset": [52, 25]} 20 | ] 21 | } 22 | ], 23 | "animations": [ 24 | { 25 | "var.counter": "clamp(if(is_wet, var.counter + 100 * frame_time, var.counter - 100 * frame_time), 0, 180)" 26 | }, 27 | { 28 | "spin.rz": "torad(var.counter)" 29 | } 30 | ] 31 | }, 32 | { 33 | "part": "body", 34 | "id": "body", 35 | "invertAxis": "xy", 36 | "translate": [0, -14, 0] 37 | }, 38 | { 39 | "part": "leg4", 40 | "id": "leg4", 41 | "invertAxis": "xy", 42 | "translate": [5.5, -9, 9] 43 | }, 44 | { 45 | "part": "leg3", 46 | "id": "leg3", 47 | "invertAxis": "xy", 48 | "translate": [-5.5, -9, 9] 49 | }, 50 | { 51 | "part": "leg2", 52 | "id": "leg2", 53 | "invertAxis": "xy", 54 | "translate": [5.5, -9, -9] 55 | }, 56 | { 57 | "part": "leg1", 58 | "id": "leg1", 59 | "invertAxis": "xy", 60 | "translate": [-5.5, -9, -9] 61 | } 62 | ] 63 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/loading.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Loading Screens feature. 3 | ############################################################################### 4 | # loading.properties 5 | ############################################################################### 6 | # This file is offered without any copyright restrictions. 7 | # Please copy and modify it to suit your needs. 8 | # 9 | # Location: "/assets/minecraft/optifine/gui/loading/loading.properties" 10 | # Controls the behaviour of the world loading screen 11 | # 12 | # Custom loading screen backgrounds per dimension can be defined as: 13 | # /assets/minecraft/optifine/gui/loading/background.png 14 | # where "dim" is the dimension id: 15 | # - nether = -1 16 | # - overworld = 0 17 | # - the end = 1 18 | # 19 | # Modded dimensions can also be configured in this way. 20 | 21 | # Scale mode (optional) 22 | # Custom scale mode for the background texture. 23 | # Values 24 | # fixed - use fixed scale (default) 25 | # full - full screen, keep aspect ratio 26 | # stretch - fullscreen 27 | scaleMode= 28 | 29 | # Scale (optional) 30 | # Custom scale for the background texture. 31 | # For scale mode "fixed" it defines the scale to use (default is 2). 32 | # This is combined with the curent GUI scale. 33 | # For scale modes "full" and "stretch" it defines how many full textures should 34 | # fit on the screen (default is 1). 35 | scale=2 36 | 37 | # Center (optional) 38 | # Defines if the background texture should be centered on the screen. 39 | # Default is false. 40 | center= 41 | 42 | # The properties "scaleMode", "scale" and "center" can also be configured per dimension 43 | dim.scaleMode= 44 | dim.scale=2 45 | dim.center= 46 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/background.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Panorama feature. 3 | ############################################################################### 4 | # background.properties 5 | ############################################################################### 6 | # This file is offered without any copyright restrictions. Please copy and 7 | # modify it to suit your needs. 8 | # 9 | # Location: "/assets/minecraft/optifine/gui/background.properties" 10 | # Controls the behaviour of the main menu panorama 11 | # 12 | # Alternative panorama folders: 13 | # /assets/minecraft/optifine/gui/background1 14 | # /assets/minecraft/optifine/gui/background2 15 | # /assets/minecraft/optifine/gui/background3 16 | # ... 17 | # 18 | # The alternative panorama folders should contain the following textures 19 | # panorama_0.png 20 | # panorama_1.png 21 | # panorama_2.png 22 | # panorama_3.png 23 | # panorama_4.png 24 | # panorama_5.png 25 | # 26 | # The alternative panorama folders can include "background.properties" to 27 | # define custom properties for the panorama 28 | 29 | # Weight (optional) 30 | # Weight for the random selection, higher weights will be selected more often 31 | # Default is 1 32 | weight= 33 | 34 | # Blur level (optional) 35 | # The main menu background uses 3 types of blur 36 | # Higher blur levels may decrease the main menu FPS 37 | blur1=<1-64> 38 | blur2=<1-3> 39 | blur3=<1-3> 40 | 41 | # Overlay colors (optional) 42 | # There are 2 gradient overlays drawn over the background image 43 | # When the top and bottom colors are 0 the overlay is disabled 44 | # The color format is ARGB (hex) 45 | # Default values are shown below 46 | overlay1.top=80FFFFFF 47 | overlay1.bottom=00FFFFFF 48 | overlay2.top=00000000 49 | overlay2.bottom=80000000 50 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/cem/trident2.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [32, 32], 4 | "texture": "textures/entity/trident/quindent.png", 5 | "models": [ 6 | { 7 | "part": "body", 8 | "id": "body", 9 | "invertAxis": "xy", 10 | "translate": [0, -27, 0], 11 | "boxes": [ 12 | {"coordinates": [-1.5, 21, -0.5, 3, 6, 1], "textureOffset": [4, 3]}, 13 | {"coordinates": [-0.5, 27, -0.5, 1, 4, 1], "textureOffset": [0, 0]}, 14 | {"coordinates": [3.5, 25, -0.5, 1, 4, 1], "textureOffset": [4, 10]}, 15 | {"coordinates": [1.5, 26, -0.5, 1, 4, 1], "textureOffset": [4, 10]}, 16 | {"coordinates": [-4.5, 25, -0.5, 1, 4, 1], "textureOffset": [4, 10]}, 17 | {"coordinates": [2.5, 24, -0.5, 1, 2, 1], "textureOffset": [8, 7]}, 18 | {"coordinates": [-3.5, 24, -0.5, 1, 2, 1], "textureOffset": [8, 7]}, 19 | {"coordinates": [-2.5, 23, -0.5, 5, 2, 1], "textureOffset": [4, 0]}, 20 | {"coordinates": [-2.5, 26, -0.5, 1, 4, 1], "textureOffset": [4, 10]} 21 | ], 22 | "submodels": [ 23 | { 24 | "invertAxis": "xy", 25 | "mirrorTexture": "u", 26 | "boxes": [ 27 | {"coordinates": [-0.5, 0, -0.5, 1, 21, 1], "textureOffset": [0, 10]} 28 | ] 29 | } 30 | ] 31 | }, 32 | { 33 | "part": "base", 34 | "id": "base", 35 | "invertAxis": "xy", 36 | "translate": [0, 0, 0] 37 | }, 38 | { 39 | "part": "left_spike", 40 | "id": "left_spike", 41 | "invertAxis": "xy", 42 | "translate": [0, 0, 0] 43 | }, 44 | { 45 | "part": "middle_spike", 46 | "id": "middle_spike", 47 | "invertAxis": "xy", 48 | "translate": [0, 0, 0] 49 | }, 50 | { 51 | "part": "right_spike", 52 | "id": "right_spike", 53 | "invertAxis": "xy", 54 | "translate": [0, 0, 0] 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/skeleton.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "headwear", 13 | "id": "headwear", 14 | "invertAxis": "xy", 15 | "translate": [0, -24, 0] 16 | }, 17 | { 18 | "part": "body", 19 | "id": "body", 20 | "invertAxis": "xy", 21 | "translate": [0, -24, 0], 22 | "submodels": [ 23 | { 24 | "id": "cancel", 25 | "invertAxis": "xy", 26 | "translate": [0, 28, 0], 27 | "submodels": [ 28 | { 29 | "id": "rotate", 30 | "invertAxis": "xy", 31 | "translate": [0, 0, 0], 32 | "boxes": [ 33 | {"coordinates": [-4, -4, -4, 8, 8, 8], "textureOffset": [0, 0]} 34 | ] 35 | } 36 | ] 37 | } 38 | ], 39 | "animations": [ 40 | { 41 | "cancel.ry": "-rot_y", 42 | "rotate.ry": "torad(-90 + atan2(player_pos_z - pos_z, player_pos_x - pos_x) * 180 / pi)", 43 | "rotate.rx": "torad(-90) + acos((player_pos_y - pos_y) / sqrt(pow(player_pos_x - pos_x, 2) + pow(player_pos_y - pos_y, 2) + pow(player_pos_z - pos_z, 2)))" 44 | } 45 | ] 46 | }, 47 | { 48 | "part": "left_arm", 49 | "id": "left_arm", 50 | "invertAxis": "xy", 51 | "mirrorTexture": "u", 52 | "translate": [5, -22, 0] 53 | }, 54 | { 55 | "part": "right_arm", 56 | "id": "right_arm", 57 | "invertAxis": "xy", 58 | "translate": [-5, -22, 0] 59 | }, 60 | { 61 | "part": "left_leg", 62 | "id": "left_leg", 63 | "invertAxis": "xy", 64 | "mirrorTexture": "u", 65 | "translate": [2, -12, -0.1] 66 | }, 67 | { 68 | "part": "right_leg", 69 | "id": "right_leg", 70 | "invertAxis": "xy", 71 | "translate": [-2, -12, -0.1] 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/zombie.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "body", 13 | "id": "body", 14 | "invertAxis": "xy", 15 | "translate": [0, -24, 0], 16 | "submodels": [ 17 | { 18 | "id": "a", 19 | "invertAxis": "xy", 20 | "translate": [0, 28, 0], 21 | "boxes": [ 22 | {"coordinates": [-4, -4, -4, 8, 8, 8], "textureOffset": [0, 0]} 23 | ] 24 | }, 25 | { 26 | "id": "b", 27 | "invertAxis": "xy", 28 | "translate": [0, 20, 0], 29 | "boxes": [ 30 | {"coordinates": [-4, -4, -4, 8, 8, 8], "textureOffset": [0, 0]} 31 | ] 32 | }, 33 | { 34 | "id": "c", 35 | "invertAxis": "xy", 36 | "translate": [0, 12, 0], 37 | "boxes": [ 38 | {"coordinates": [-4, -4, -4, 8, 8, 8], "textureOffset": [0, 0]} 39 | ] 40 | } 41 | ], 42 | "animations": [ 43 | { 44 | "var.wave": "sin(time / 4) * 4" 45 | }, 46 | { 47 | "a.tx": "var.wave", 48 | "b.tx": "-var.wave", 49 | "c.tx": "var.wave * 2" 50 | } 51 | ] 52 | }, 53 | { 54 | "part": "left_arm", 55 | "id": "left_arm", 56 | "invertAxis": "xy", 57 | "mirrorTexture": "u", 58 | "translate": [5, -22, 0] 59 | }, 60 | { 61 | "part": "right_arm", 62 | "id": "right_arm", 63 | "invertAxis": "xy", 64 | "translate": [-5, -22, 0] 65 | }, 66 | { 67 | "part": "left_leg", 68 | "id": "left_leg", 69 | "invertAxis": "xy", 70 | "mirrorTexture": "u", 71 | "translate": [1.9, -12, 0] 72 | }, 73 | { 74 | "part": "right_leg", 75 | "id": "right_leg", 76 | "invertAxis": "xy", 77 | "translate": [-1.9, -12, 0] 78 | } 79 | ] 80 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/villager.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "nose", 13 | "id": "nose", 14 | "invertAxis": "xy", 15 | "translate": [0, -26, 0] 16 | }, 17 | { 18 | "part": "headwear", 19 | "id": "headwear", 20 | "invertAxis": "xy", 21 | "translate": [0, -24, 0] 22 | }, 23 | { 24 | "part": "headwear2", 25 | "id": "headwear2", 26 | "invertAxis": "xy", 27 | "translate": [0, -24, 0], 28 | "rotate": [90, 0, 0] 29 | }, 30 | { 31 | "part": "body", 32 | "id": "body", 33 | "invertAxis": "xy", 34 | "translate": [0, -24, 0], 35 | "boxes": [ 36 | {"coordinates": [-4, 0, -3, 8, 12, 6], "textureOffset": [16, 20]} 37 | ], 38 | "submodels": [ 39 | { 40 | "id": "custom_head", 41 | "invertAxis": "xy", 42 | "translate": [0, 12, 0], 43 | "boxes": [ 44 | {"coordinates": [-4, 0, -4, 8, 10, 8], "textureOffset": [0, 0]}, 45 | {"coordinates": [-1, -1, -6, 2, 4, 2], "textureOffset": [24, 0]} 46 | ] 47 | } 48 | ], 49 | "animations": [ 50 | { 51 | "custom_head.rx": "torad(head_pitch)", 52 | "custom_head.ry": "torad(head_yaw)" 53 | } 54 | ] 55 | }, 56 | { 57 | "part": "bodywear", 58 | "id": "bodywear", 59 | "invertAxis": "xy", 60 | "translate": [0, -24, 0] 61 | }, 62 | { 63 | "part": "arms", 64 | "id": "arms", 65 | "invertAxis": "xy", 66 | "translate": [0, -21.05, 1.05], 67 | "rotate": [43, 0, 0] 68 | }, 69 | { 70 | "part": "right_leg", 71 | "id": "right_leg", 72 | "invertAxis": "xy", 73 | "translate": [-2, -12, 0] 74 | }, 75 | { 76 | "part": "left_leg", 77 | "id": "left_leg", 78 | "invertAxis": "xy", 79 | "translate": [2, -12, 0] 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/optifine/cem/trident3.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "texture": "textures/entity/trident/mjolnir.png", 5 | "models": [ 6 | { 7 | "part": "body", 8 | "id": "body", 9 | "invertAxis": "xy", 10 | "translate": [0, -27, 0], 11 | "boxes": [ 12 | {"coordinates": [-4.5, 25, -3, 9, 6, 6], "textureOffset": [0, 0]}, 13 | {"coordinates": [-2, 30.5, -2, 4, 1, 4], "textureOffset": [0, 22]}, 14 | {"coordinates": [-5, 25.5, -2.5, 10, 5, 5], "textureOffset": [0, 12]}, 15 | {"coordinates": [-1, 14, -1, 2, 11, 2], "textureOffset": [30, 0]} 16 | ], 17 | "submodels": [ 18 | { 19 | "id": "strap", 20 | "invertAxis": "xy", 21 | "translate": [-1, 14, 0], 22 | "rotate": [0, 0, 45], 23 | "boxes": [ 24 | { 25 | "coordinates": [0, -4, 0.99, 2, 4, 0], 26 | "uvNorth": [32, 15, 34, 19], 27 | "uvSouth": [36, 15, 38, 19] 28 | }, 29 | { 30 | "coordinates": [0, -4, -0.99, 2, 4, 0], 31 | "uvNorth": [32, 15, 34, 19], 32 | "uvSouth": [36, 15, 38, 19] 33 | }, 34 | { 35 | "coordinates": [0, -4, -1, 2, 0, 2], 36 | "uvUp": [36, 13, 34, 15], 37 | "uvDown": [36, 13, 34, 15] 38 | } 39 | ] 40 | }, 41 | { 42 | "id": "hammer", 43 | "invertAxis": "xy", 44 | "translate": [0, 0, 0] 45 | } 46 | ] 47 | }, 48 | { 49 | "part": "base", 50 | "id": "base", 51 | "invertAxis": "xy", 52 | "translate": [0, 0, 0] 53 | }, 54 | { 55 | "part": "left_spike", 56 | "id": "left_spike", 57 | "invertAxis": "xy", 58 | "translate": [0, 0, 0] 59 | }, 60 | { 61 | "part": "middle_spike", 62 | "id": "middle_spike", 63 | "invertAxis": "xy", 64 | "translate": [0, 0, 0] 65 | }, 66 | { 67 | "part": "right_spike", 68 | "id": "right_spike", 69 | "invertAxis": "xy", 70 | "translate": [0, 0, 0] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/cow.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -20, 8], 10 | "submodels": [ 11 | { 12 | "id": "over", 13 | "invertAxis": "xy", 14 | "translate": [0, 28, -11], 15 | "boxes": [ 16 | {"coordinates": [-4, -4, -3, 8, 8, 6], "textureOffset": [0, 0]} 17 | ] 18 | }, 19 | { 20 | "id": "within", 21 | "invertAxis": "xy", 22 | "translate": [0, 20, -11], 23 | "boxes": [ 24 | {"coordinates": [-4, -4, -3, 8, 8, 6], "textureOffset": [0, 0]} 25 | ] 26 | }, 27 | { 28 | "id": "under", 29 | "invertAxis": "xy", 30 | "translate": [0, 12, -11], 31 | "boxes": [ 32 | {"coordinates": [-4, -4, -3, 8, 8, 6], "textureOffset": [0, 0]} 33 | ] 34 | } 35 | ], 36 | "animations": [ 37 | { 38 | "var.distance": "sqrt(pow(pos_x - player_pos_x, 2) + pow(pos_y - player_pos_y, 2) + pow(pos_z - player_pos_z, 2))" 39 | }, 40 | { 41 | "var.limit": 5, 42 | "under.ry": "if(var.distance < var.limit, time, 0)", 43 | "over.ry": "if(var.distance > var.limit, time, 0)" 44 | }, 45 | { 46 | "var.max": 7, 47 | "var.min": 3, 48 | "within.ry": "if(var.distance > var.min && var.distance < var.max, time, 0)" 49 | } 50 | ] 51 | }, 52 | { 53 | "part": "body", 54 | "id": "body", 55 | "invertAxis": "xy", 56 | "translate": [0, -19, -2], 57 | "rotate": [-90, 0, 0] 58 | }, 59 | { 60 | "part": "leg1", 61 | "id": "leg1", 62 | "invertAxis": "xy", 63 | "translate": [-4, -12, -7] 64 | }, 65 | { 66 | "part": "leg2", 67 | "id": "leg2", 68 | "invertAxis": "xy", 69 | "translate": [4, -12, -7] 70 | }, 71 | { 72 | "part": "leg3", 73 | "id": "leg3", 74 | "invertAxis": "xy", 75 | "translate": [-4, -12, 6] 76 | }, 77 | { 78 | "part": "leg4", 79 | "id": "leg4", 80 | "invertAxis": "xy", 81 | "translate": [4, -12, 6] 82 | } 83 | ] 84 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/hd_fonts.txt: -------------------------------------------------------------------------------- 1 | =============================================== 2 | Description of OptiFine's HD Fonts feature 3 | Based on McPatcher's HD Fonts 4 | =============================================== 5 | 6 | HD Fonts 7 | ======== 8 | 9 | As of 1.6, Minecraft allows fonts to be higher resolution than the default, but customization is still limited. 10 | 11 | OptiFine first looks for fonts in the "assets/minecraft/optifine/font" folder. 12 | This allows you to have a custom font that works in vanilla and a higher resolution font that requires OptiFine to display properly. 13 | 14 | Default font: assets/minecraft/optifine/font/ascii.png 15 | Enchanting table font: assets/minecraft/optifine/font/ascii_sga.png 16 | 17 | Note: Unicode fonts are not supported. 18 | 19 | To allow for more control over the widths of individual characters, OptiFine offers a way to specify them manually. 20 | Create a properties file called: 21 | 22 | assets/minecraft/optifine/font/ascii.properties 23 | assets/minecraft/optifine/font/ascii_sga.properties 24 | 25 | corresponding to the font you wish to customize. 26 | 27 | Properties file format 28 | ====================== 29 | 30 | Each line in this file specifies the width of a character: 31 | 32 | # Custom width 33 | width.= 34 | 35 | For example, to specify the widths of capital A, B, and C, you might use 36 | 37 | # ABC 38 | width.65=5.9 39 | width.66=5 40 | width.67=5.25 41 | 42 | Values can be floating point numbers (Vanilla only supports integer widths) and range from 0-8 regardless of the resolution of the font. 43 | You do not need to specify widths for all characters, only the ones where you want to override the default width. 44 | 45 | The space character default width is 4.0. 46 | You can override this the same way, by setting "width.32" to a custom value. 47 | 48 | Alpha Blending 49 | ============== 50 | 51 | When enabled the font will use alpha blending 52 | 53 | # Alpha blending 54 | blend= 55 | 56 | Bold offset 57 | =========== 58 | 59 | Bold characters are rendered twice with a small X offset which corresponds to the character stroke width. 60 | The default offset is 1.0 for standard 8x fonts (texture 128x128) and 0.5 for higher resolutions. 61 | 62 | # Bold offset 63 | offsetBold= 64 | 65 | Reference 66 | ========= 67 | https://bitbucket.org/prupe/mcpatcher/wiki/HD_Fonts 68 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/armor_stand.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -23, 0] 10 | }, 11 | { 12 | "part": "body", 13 | "id": "body", 14 | "invertAxis": "xy", 15 | "translate": [0, -24, 0], 16 | "submodels": [ 17 | { 18 | "id": "spin", 19 | "invertAxis": "xy", 20 | "translate": [0, 22.5, 0], 21 | "boxes": [ 22 | {"coordinates": [-6, -1.5, -1.5, 12, 3, 3], "textureOffset": [0, 26]} 23 | ] 24 | } 25 | ], 26 | "animations": [ 27 | { 28 | "var.amount": "if(var.random == 0, lerp(random(), 0.1, 1), var.amount)", 29 | "var.random": "if(var.random >= 3 || var.counter != 0, 0, var.random + var.amount * frame_time)", 30 | "var.counter": "if(var.counter >= 1 || var.random != 0, 0, var.counter + 1 * frame_time)" 31 | }, 32 | { 33 | "spin.ry": "torad(var.counter * 360)" 34 | } 35 | ] 36 | }, 37 | { 38 | "part": "left_arm", 39 | "id": "left_arm", 40 | "invertAxis": "xy", 41 | "mirrorTexture": "u", 42 | "translate": [5, -22, 0] 43 | }, 44 | { 45 | "part": "right_arm", 46 | "id": "right_arm", 47 | "invertAxis": "xy", 48 | "translate": [-5, -22, 0] 49 | }, 50 | { 51 | "part": "left_leg", 52 | "id": "left_leg", 53 | "invertAxis": "xy", 54 | "mirrorTexture": "u", 55 | "translate": [1.85, -12, 0] 56 | }, 57 | { 58 | "part": "right_leg", 59 | "id": "right_leg", 60 | "invertAxis": "xy", 61 | "translate": [-1.85, -12, 0] 62 | }, 63 | { 64 | "part": "right", 65 | "id": "right", 66 | "invertAxis": "xy", 67 | "translate": [0, -24, 0] 68 | }, 69 | { 70 | "part": "left", 71 | "id": "left", 72 | "invertAxis": "xy", 73 | "translate": [0, -24, 0] 74 | }, 75 | { 76 | "part": "waist", 77 | "id": "waist", 78 | "invertAxis": "xy", 79 | "translate": [0, -24, 0] 80 | }, 81 | { 82 | "part": "base", 83 | "id": "base", 84 | "invertAxis": "xy", 85 | "translate": [0, -12, 0] 86 | } 87 | ] 88 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/wither_skeleton.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "headwear", 13 | "id": "headwear", 14 | "invertAxis": "xy", 15 | "translate": [0, -24, 0] 16 | }, 17 | { 18 | "part": "body", 19 | "id": "body", 20 | "invertAxis": "xy", 21 | "translate": [0, -24, 0], 22 | "submodels": [ 23 | { 24 | "id": "cancel", 25 | "invertAxis": "xy", 26 | "translate": [0, 0, 0], 27 | "boxes": [ 28 | {"coordinates": [-4, 12, -2, 8, 12, 4], "textureOffset": [16, 16]}, 29 | {"coordinates": [-4, 24, -4, 8, 8, 8], "textureOffset": [0, 0]}, 30 | {"coordinates": [-4, 24, -4, 8, 8, 8], "textureOffset": [32, 0], "sizeAdd": 0.5}, 31 | {"coordinates": [1, 0, -1, 2, 12, 2], "textureOffset": [0, 16]}, 32 | {"coordinates": [4, 12, -1, 2, 12, 2], "textureOffset": [40, 16]} 33 | ], 34 | "submodels": [ 35 | { 36 | "id": "body_sub_1", 37 | "invertAxis": "xy", 38 | "mirrorTexture": "u", 39 | "translate": [0, 0, 0], 40 | "boxes": [ 41 | {"coordinates": [-6, 12, -1, 2, 12, 2], "textureOffset": [40, 16]}, 42 | {"coordinates": [-3, 0, -1, 2, 12, 2], "textureOffset": [0, 16]} 43 | ] 44 | } 45 | ] 46 | } 47 | ], 48 | "animations": [ 49 | { 50 | "cancel.rz": "if(death_time > 0, -torad(min(sqrt((death_time - 1) / 20 * 1.6), 1) * 90), 0)" 51 | } 52 | ] 53 | }, 54 | { 55 | "part": "left_arm", 56 | "id": "left_arm", 57 | "invertAxis": "xy", 58 | "mirrorTexture": "u", 59 | "translate": [5, -22, 0] 60 | }, 61 | { 62 | "part": "right_arm", 63 | "id": "right_arm", 64 | "invertAxis": "xy", 65 | "translate": [-5, -22, 0] 66 | }, 67 | { 68 | "part": "left_leg", 69 | "id": "left_leg", 70 | "invertAxis": "xy", 71 | "mirrorTexture": "u", 72 | "translate": [2, -12, -0.1] 73 | }, 74 | { 75 | "part": "right_leg", 76 | "id": "right_leg", 77 | "invertAxis": "xy", 78 | "translate": [-2, -12, -0.1] 79 | } 80 | ] 81 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/cit.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Items feature. 3 | # Based on the configuration for MCPatcher's Custom Item Textures mod. 4 | # 5 | # Not implemented 6 | # - method 7 | # - cap 8 | # - fade 9 | # 10 | ############################################################################### 11 | # cit.properties 12 | ############################################################################### 13 | # 14 | # This file contains global properties for the Custom Item Textures mod and 15 | # should be in the optifine/cit folder of the texture pack. For individual 16 | # item textures, see cit_single.properties. 17 | # 18 | # All property names are case-sensitive. 19 | # All paths are relative to assets/minecraft unless otherwise stated. 20 | ############################################################################### 21 | 22 | # (Optional) Specify how to apply multiple effects to the same item. 23 | # Depending on the method chosen, multiple effects can be rendered with 24 | # different intensities from 0 (not visible) to 1 (fully visible). 25 | # average: Weighted average by enchantment level. 26 | # intensity = enchantment_level / sum(enchantment_levels) 27 | # layered: Similar to average, but max is used instead of sum. 28 | # intensity = enchantment_level / max(enchantment_levels) 29 | # cycle: Cycle through each effect in turn. The duration of each effect 30 | # can be set via the duration property. The [group] value if present 31 | # allows multiple sets of effects to be cycled independently. 32 | # Note that average and layered with cap=1 are equivalent and will both show 33 | # only the "dominant" enchantment on an item. 34 | method= 35 | 36 | # (Optional) Specify how many layers can render for average/layered method. 37 | # The topmost layers have priority over bottommost layers as determined by 38 | # the layer value of each effect. 39 | cap= 40 | 41 | # (Optional) The speed at which one effect transitions to another in a cycle. 42 | # This does not affect the duration of the actual effect when displayed -- for 43 | # that use the effect's duration property. 44 | # The default is 0.5 seconds. 45 | fade= 46 | 47 | # (Optional) Whether to use the default glint.png enchantment. If true, 48 | # glint.png is used if no other custom enchantment effect matches. If set to 49 | # false, the default glint.png enchantment stops rendering completely. This is 50 | # important for items that have no specific enchantment, but have an 51 | # enchantment effect -- such as potions and golden apples. 52 | # The default is true. 53 | useGlint= 54 | -------------------------------------------------------------------------------- /OptiFineDoc/assets/minecraft/optifine/lang/en_gb.lang: -------------------------------------------------------------------------------- 1 | # Translator = sp614x, Diego R. V. 2 | 3 | # Video Settings 4 | 5 | options.anaglyph.tooltip.2=Enables a stereoscopic 3D effect using different colours 6 | 7 | of.options.shaders.OLD_HAND_LIGHT.tooltip.6=recognise light emitting items in the main hand 8 | 9 | of.options.shaders.SHADOW_RES_MUL.tooltip.7=Lower values = inexact, coarser shadows. 10 | 11 | # Quality 12 | 13 | of.options.AA_LEVEL.tooltip.5=sharp colour transitions. 14 | 15 | of.options.CUSTOM_COLORS=Custom Colours 16 | of.options.CUSTOM_COLORS.tooltip.1=Custom Colours 17 | of.options.CUSTOM_COLORS.tooltip.2= ON - uses custom colours (default), slower 18 | of.options.CUSTOM_COLORS.tooltip.3= OFF - uses default colours, faster 19 | of.options.CUSTOM_COLORS.tooltip.4=The custom colours are supplied by the current 20 | 21 | of.options.SWAMP_COLORS=Swamp Colours 22 | of.options.SWAMP_COLORS.tooltip.1=Swamp Colours 23 | of.options.SWAMP_COLORS.tooltip.2= ON - use swamp colours (default), slower 24 | of.options.SWAMP_COLORS.tooltip.3= OFF - do not use swamp colours, faster 25 | of.options.SWAMP_COLORS.tooltip.4=The swamp colours affect grass, leaves, vines and water. 26 | 27 | of.options.SMOOTH_BIOMES.tooltip.5=averaging the colour of all surrounding blocks. 28 | 29 | # Details 30 | 31 | of.options.TRANSLUCENT_BLOCKS.tooltip.3= Fancy - correct colour blending (slower) 32 | of.options.TRANSLUCENT_BLOCKS.tooltip.4= Fast - fast colour blending (faster) 33 | of.options.TRANSLUCENT_BLOCKS.tooltip.5=Controls the colour blending of translucent blocks 34 | of.options.TRANSLUCENT_BLOCKS.tooltip.6=with different colour (stained glass, water, ice) 35 | 36 | options.biomeBlendRadius.tooltip.1=Smooths the colour transition between biomes 37 | 38 | # Performance 39 | 40 | of.options.SMOOTH_FPS.tooltip.1=Stabilises FPS by flushing the graphic driver buffers. 41 | of.options.SMOOTH_FPS.tooltip.2= OFF - no stabilisation, FPS may fluctuate 42 | of.options.SMOOTH_FPS.tooltip.3= ON - FPS stabilisation 43 | 44 | of.options.SMOOTH_WORLD.tooltip.2= OFF - no stabilisation, FPS may fluctuate 45 | of.options.SMOOTH_WORLD.tooltip.3= ON - FPS stabilisation 46 | of.options.SMOOTH_WORLD.tooltip.4=Stabilises FPS by distributing the internal server load. 47 | 48 | of.options.FAST_RENDER.tooltip.3= ON - optimised rendering (faster) 49 | of.options.FAST_RENDER.tooltip.4=Uses optimised rendering algorithm which decreases 50 | 51 | of.options.FAST_MATH=Fast Maths 52 | of.options.FAST_MATH.tooltip.1=Fast Maths 53 | of.options.FAST_MATH.tooltip.2= OFF - standard maths (default) 54 | of.options.FAST_MATH.tooltip.3= ON - faster maths 55 | of.options.FAST_MATH.tooltip.4=Uses optimised sin() and cos() functions which can 56 | of.options.FAST_MATH.tooltip.5=better utilise the CPU cache and increase the FPS. 57 | 58 | of.options.CHUNK_UPDATES.tooltip.6=higher values may destabilise the framerate. 59 | 60 | of.options.RENDER_REGIONS.tooltip.4=Allows faster terrain rendering by optimising 61 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/zombified_piglin.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "left_ear", 13 | "id": "left_ear", 14 | "invertAxis": "xy", 15 | "translate": [4.5, -30, 0], 16 | "rotate": [0, 0, -35] 17 | }, 18 | { 19 | "part": "right_ear", 20 | "id": "right_ear", 21 | "invertAxis": "xy", 22 | "translate": [-4.5, -30, 0], 23 | "rotate": [0, 0, 35] 24 | }, 25 | { 26 | "part": "body", 27 | "id": "body", 28 | "invertAxis": "xy", 29 | "translate": [0, -24, 0], 30 | "submodels": [ 31 | { 32 | "id": "rotate", 33 | "invertAxis": "xy", 34 | "translate": [0, 0, 0], 35 | "submodels": [ 36 | { 37 | "id": "snap", 38 | "invertAxis": "xy", 39 | "translate": [0, 0, 0], 40 | "boxes": [ 41 | {"coordinates": [-8, 0, -8, 16, 16, 16], "textureOffset": [0, 0]} 42 | ] 43 | } 44 | ] 45 | } 46 | ], 47 | "animations": [ 48 | { 49 | "rotate.ry": "-rot_y", 50 | "snap.tx": "8 - frac(pos_x) * 16", 51 | "snap.ty": "frac(pos_y) * 16", 52 | "snap.tz": "-8 + frac(pos_z) * 16" 53 | } 54 | ] 55 | }, 56 | { 57 | "part": "jacket", 58 | "id": "jacket", 59 | "invertAxis": "xy", 60 | "translate": [0, -24, 0] 61 | }, 62 | { 63 | "part": "left_arm", 64 | "id": "left_arm", 65 | "invertAxis": "xy", 66 | "translate": [5, -22, 0] 67 | }, 68 | { 69 | "part": "left_sleeve", 70 | "id": "left_sleeve", 71 | "invertAxis": "xy", 72 | "translate": [5, -22, 0] 73 | }, 74 | { 75 | "part": "right_arm", 76 | "id": "right_arm", 77 | "invertAxis": "xy", 78 | "translate": [-5, -22, 0] 79 | }, 80 | { 81 | "part": "right_sleeve", 82 | "id": "right_sleeve", 83 | "invertAxis": "xy", 84 | "translate": [-5, -22, 0] 85 | }, 86 | { 87 | "part": "left_leg", 88 | "id": "left_leg", 89 | "invertAxis": "xy", 90 | "translate": [2, -12, 0] 91 | }, 92 | { 93 | "part": "left_pants", 94 | "id": "left_pants", 95 | "invertAxis": "xy", 96 | "translate": [2, -12, 0] 97 | }, 98 | { 99 | "part": "right_leg", 100 | "id": "right_leg", 101 | "invertAxis": "xy", 102 | "translate": [-2, -12, 0] 103 | }, 104 | { 105 | "part": "right_pants", 106 | "id": "right_pants", 107 | "invertAxis": "xy", 108 | "translate": [-2, -12, 0] 109 | } 110 | ] 111 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Help OptiFine pinpoint issues 4 | title: "[Category] Short description" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## Description of Issue 10 | 11 | 12 | 13 | ## Steps to Reproduce 14 | 15 | 1. What do you do... 16 | 2. ...to find this bug? 17 | 18 | ## OptiFine Version 19 | 20 | 21 | 22 | ## Installation Method 23 | 24 | 25 | 26 | ## Fabric/Forge Version 27 | 28 | 29 | 30 | ## OptiFabric Version 31 | 32 | 33 | 34 | ## Other Installed Mods 35 | 36 | 37 | 38 | 39 | 40 | ## Log Files/Crash Reports 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | ## F3 Debug Screenshot 50 | 51 | 52 | 53 | 54 | 55 | ## Prior Testing 56 | 57 | 72 | 73 | ## Additional Information 74 | 75 | 76 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/trident_in_hand.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "texture_size": [32, 32], 4 | "textures": { 5 | "trident": "entity/trident", 6 | "particle": "item/trident" 7 | }, 8 | "elements": [ 9 | { 10 | "name": "right_spike", 11 | "from": [-2.5, 26, -0.5], 12 | "to": [-1.5, 30, 0.5], 13 | "faces": { 14 | "north": {"uv": [3, 2, 2.5, 4], "texture": "#trident"}, 15 | "east": {"uv": [3.5, 2, 3, 4], "texture": "#trident"}, 16 | "south": {"uv": [4, 2, 3.5, 4], "texture": "#trident"}, 17 | "west": {"uv": [2.5, 2, 2, 4], "texture": "#trident"}, 18 | "up": {"uv": [2.5, 2, 3, 1.5], "texture": "#trident"}, 19 | "down": {"uv": [3, 1.5, 3.5, 2], "texture": "#trident"} 20 | } 21 | }, 22 | { 23 | "name": "middle_spike", 24 | "from": [-0.5, 27, -0.5], 25 | "to": [0.5, 31, 0.5], 26 | "faces": { 27 | "north": {"uv": [0.5, 0.5, 1, 2.5], "texture": "#trident"}, 28 | "east": {"uv": [0, 0.5, 0.5, 2.5], "texture": "#trident"}, 29 | "south": {"uv": [1.5, 0.5, 2, 2.5], "texture": "#trident"}, 30 | "west": {"uv": [1, 0.5, 1.5, 2.5], "texture": "#trident"}, 31 | "up": {"uv": [1, 0.5, 0.5, 0], "texture": "#trident"}, 32 | "down": {"uv": [1.5, 0, 1, 0.5], "texture": "#trident"} 33 | } 34 | }, 35 | { 36 | "name": "left_spike", 37 | "from": [1.5, 26, -0.5], 38 | "to": [2.5, 30, 0.5], 39 | "faces": { 40 | "north": {"uv": [2.5, 2, 3, 4], "texture": "#trident"}, 41 | "east": {"uv": [2, 2, 2.5, 4], "texture": "#trident"}, 42 | "south": {"uv": [3.5, 2, 4, 4], "texture": "#trident"}, 43 | "west": {"uv": [3, 2, 3.5, 4], "texture": "#trident"}, 44 | "up": {"uv": [3, 2, 2.5, 1.5], "texture": "#trident"}, 45 | "down": {"uv": [3.5, 1.5, 3, 2], "texture": "#trident"} 46 | } 47 | }, 48 | { 49 | "name": "base", 50 | "from": [-1.5, 25, -0.5], 51 | "to": [1.5, 27, 0.5], 52 | "faces": { 53 | "north": {"uv": [2.5, 0.5, 4, 1.5], "texture": "#trident"}, 54 | "east": {"uv": [2, 0.5, 2.5, 1.5], "texture": "#trident"}, 55 | "south": {"uv": [4.5, 0.5, 6, 1.5], "texture": "#trident"}, 56 | "west": {"uv": [4, 0.5, 4.5, 1.5], "texture": "#trident"}, 57 | "up": {"uv": [4, 0.5, 2.5, 0], "texture": "#trident"}, 58 | "down": {"uv": [5.5, 0, 4, 0.5], "texture": "#trident"} 59 | } 60 | }, 61 | { 62 | "name": "body", 63 | "from": [-0.5, 0, -0.5], 64 | "to": [0.5, 25, 0.5], 65 | "faces": { 66 | "north": {"uv": [0.5, 3.5, 1, 16], "texture": "#trident"}, 67 | "east": {"uv": [0, 3.5, 0.5, 16], "texture": "#trident"}, 68 | "south": {"uv": [1.5, 3.5, 2, 16], "texture": "#trident"}, 69 | "west": {"uv": [1, 3.5, 1.5, 16], "texture": "#trident"}, 70 | "up": {"uv": [1, 3.5, 0.5, 3], "texture": "#trident"}, 71 | "down": {"uv": [1.5, 3, 1, 3.5], "texture": "#trident"} 72 | } 73 | } 74 | ], 75 | "display": { 76 | "thirdperson_righthand": { 77 | "rotation": [0, 60, 0], 78 | "translation": [11, -10, -2] 79 | }, 80 | "thirdperson_lefthand": { 81 | "rotation": [0, 60, 0], 82 | "translation": [3, -10, 12] 83 | }, 84 | "firstperson_righthand": { 85 | "rotation": [0, -90, 25], 86 | "translation": [-3, -7.5, 12.4] 87 | }, 88 | "firstperson_lefthand": { 89 | "rotation": [0, 90, -25], 90 | "translation": [13, -7.5, 12.4] 91 | } 92 | } 93 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/custom_animations.txt: -------------------------------------------------------------------------------- 1 | =================================================== 2 | Description of OptiFine's Custom Animations feature 3 | Based on McPatcher's Custom Animations 4 | =================================================== 5 | 6 | Animated textures 7 | ================= 8 | 9 | In Minecraft 1.5, Mojang added the ability to animate any block or item texture (originally a feature provided by MCPatcher). 10 | However, there is yet no way to animate other textures like mob skins or GUIs. OptiFine fills the gap enabling 11 | any rectangular area of any non-block or item texture to be animated. This includes even textures specific to other OptiFine features 12 | such as random mob skins or skyboxes. 13 | 14 | For block and item textures, including CTM and CIT replacements, continue using Mojang's mcmeta method instead. 15 | 16 | To build an animation, first choose a texture and determine the x and y coordinates and width and height of the area you want to animate. 17 | Create your animation as a vertical strip of frames. The width of the animation should be the same as the width of the area you want to animate. 18 | The height should be a multiple of the animation area height. 19 | 20 | Properties file format 21 | 22 | Create a properties file with any name you like. Put it in the assets/minecraft/optifine/anim folder of your texture pack, 23 | or any subfolder within. Add these properties to the file 24 | 25 | # Custom animation 26 | from= 27 | to= 28 | x= 29 | y= 30 | w= 31 | h= 32 | # Optional 33 | duration= 34 | interpolate= 35 | skip= 36 | 37 | See About Properties Files for how to specify paths to texture files (properties_files.txt). 38 | 39 | This creates a simple animation that plays each frame in order from top to bottom once for one tick (1/20th second) each and then loops. 40 | 41 | Multiple, non-overlapping parts of the same texture can be animated by using the same to value with different from, x, y, w, h values. 42 | They can even have independent timing and frame order information. 43 | 44 | For maximum compatibility, it is best to make x, y, w, and h multiples of 16. 45 | 46 | Frame order and timing 47 | ====================== 48 | 49 | Each custom animation may also specify its animation speed and frame order. In the properties file, add a series of entries 50 | 51 | # Frame timing 52 | tile.X=Y 53 | duration.X=Z 54 | 55 | X starts at 0 and represents the order you want frames to display in. Y is the tile number in the animation .png file, 56 | the first tile being 0, the second 1, etc. Z is the duration you want that frame displayed, in game ticks (1 tick = 1/20 second). 57 | If omitted, duration is assumed to be the default frame duration or 1 if not configured. 58 | 59 | For example, suppose your animation file is 16x48 (3 frames). To make it run on a 5-frame cycle with a pause in the middle, 60 | the properties file might look like this: 61 | 62 | # Animate 5 frames 63 | tile.0=0 64 | tile.1=1 65 | tile.2=2 66 | duration.2=5 67 | tile.3=1 68 | tile.4=0 69 | 70 | The animation happens in this order: 71 | 72 | Frame 0: Display animation tile 0 for 1 tick (default duration). 73 | Frame 1: Display animation tile 1 for 1 tick (default duration). 74 | Frame 2: Display animation tile 2 for 5 ticks (duration=5). 75 | Frame 3: Display animation tile 1 for 1 tick (default duration). 76 | Frame 4: Display animation tile 0 for 1 tick (default duration). 77 | Go back to frame 0. 78 | Total: 5 frames over 9 ticks. 79 | 80 | References 81 | ========== 82 | https://bitbucket.org/prupe/mcpatcher/wiki/Custom_Animations -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/items/trident.json: -------------------------------------------------------------------------------- 1 | { 2 | "model": { 3 | "type": "select", 4 | "cases": [ 5 | { 6 | "model": { 7 | "type": "select", 8 | "property": "component", 9 | "component": "custom_name", 10 | "cases": [ 11 | { 12 | "when": [ 13 | "Quindent", 14 | "quindent" 15 | ], 16 | "model": { 17 | "type": "model", 18 | "model": "item/quindent" 19 | } 20 | }, 21 | { 22 | "when": [ 23 | "Red Trident", 24 | "red trident" 25 | ], 26 | "model": { 27 | "type": "model", 28 | "model": "item/red_trident" 29 | } 30 | }, 31 | { 32 | "when": [ 33 | "Mjolnir", 34 | "mjolnir" 35 | ], 36 | "model": { 37 | "type": "model", 38 | "model": "item/mjolnir" 39 | } 40 | } 41 | ], 42 | "fallback": { 43 | "type": "model", 44 | "model": "item/trident" 45 | } 46 | }, 47 | "when": [ 48 | "gui", 49 | "ground", 50 | "fixed" 51 | ] 52 | } 53 | ], 54 | "fallback": { 55 | "type": "condition", 56 | "on_false": { 57 | "type": "select", 58 | "property": "component", 59 | "component": "custom_name", 60 | "cases": [ 61 | { 62 | "when": [ 63 | "Quindent", 64 | "quindent" 65 | ], 66 | "model": { 67 | "type": "model", 68 | "model": "item/quindent_in_hand" 69 | } 70 | }, 71 | { 72 | "when": [ 73 | "Red Trident", 74 | "red trident" 75 | ], 76 | "model": { 77 | "type": "model", 78 | "model": "item/red_trident_in_hand" 79 | } 80 | }, 81 | { 82 | "when": [ 83 | "Mjolnir", 84 | "mjolnir" 85 | ], 86 | "model": { 87 | "type": "model", 88 | "model": "item/mjolnir" 89 | } 90 | } 91 | ], 92 | "fallback": { 93 | "type": "model", 94 | "model": "item/trident_in_hand" 95 | } 96 | }, 97 | "on_true": { 98 | "type": "select", 99 | "property": "component", 100 | "component": "custom_name", 101 | "cases": [ 102 | { 103 | "when": [ 104 | "Quindent", 105 | "quindent" 106 | ], 107 | "model": { 108 | "type": "model", 109 | "model": "item/quindent_throwing" 110 | } 111 | }, 112 | { 113 | "when": [ 114 | "Red Trident", 115 | "red trident" 116 | ], 117 | "model": { 118 | "type": "model", 119 | "model": "item/red_trident_throwing" 120 | } 121 | }, 122 | { 123 | "when": [ 124 | "Mjolnir", 125 | "mjolnir" 126 | ], 127 | "model": { 128 | "type": "model", 129 | "model": "item/mjolnir_throwing" 130 | } 131 | } 132 | ], 133 | "fallback": { 134 | "type": "model", 135 | "model": "item/trident_throwing" 136 | } 137 | }, 138 | "property": "using_item" 139 | }, 140 | "property": "display_context" 141 | } 142 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/piglin_brute.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "left_ear", 13 | "id": "left_ear", 14 | "invertAxis": "xy", 15 | "translate": [4.5, -30, 0], 16 | "rotate": [0, 0, -35] 17 | }, 18 | { 19 | "part": "right_ear", 20 | "id": "right_ear", 21 | "invertAxis": "xy", 22 | "translate": [-4.5, -30, 0], 23 | "rotate": [0, 0, 35] 24 | }, 25 | { 26 | "part": "body", 27 | "id": "body", 28 | "invertAxis": "xy", 29 | "translate": [0, -24, 0], 30 | "submodels": [ 31 | { 32 | "id": "cancel", 33 | "invertAxis": "xy", 34 | "translate": [0, 24, 0], 35 | "boxes": [ 36 | {"coordinates": [-5, 0, -4, 10, 8, 8], "textureOffset": [0, 0]}, 37 | {"coordinates": [-2, 0, -5, 4, 4, 1], "textureOffset": [31, 1]}, 38 | {"coordinates": [-3, 0, -5, 1, 2, 1], "textureOffset": [2, 4]}, 39 | {"coordinates": [2, 0, -5, 1, 2, 1], "textureOffset": [2, 0]}, 40 | {"coordinates": [-5.5, 1, -2, 1, 5, 4], "textureOffset": [51, 6]}, 41 | {"coordinates": [4.5, 1, -2, 1, 5, 4], "textureOffset": [39, 6]}, 42 | {"coordinates": [-4, -12, -2, 8, 12, 4], "textureOffset": [16, 16]}, 43 | {"coordinates": [-4, -12, -2, 8, 12, 4], "textureOffset": [16, 32], "sizeAdd": 0.25}, 44 | {"coordinates": [-8, -12, -2, 4, 12, 4], "textureOffset": [32, 48]}, 45 | {"coordinates": [-8, -12, -2, 4, 12, 4], "textureOffset": [48, 48], "sizeAdd": 0.25}, 46 | {"coordinates": [4, -12, -2, 4, 12, 4], "textureOffset": [40, 16]}, 47 | {"coordinates": [4, -12, -2, 4, 12, 4], "textureOffset": [40, 32], "sizeAdd": 0.25}, 48 | {"coordinates": [-4, -24, -2, 4, 12, 4], "textureOffset": [16, 48]}, 49 | {"coordinates": [-4, -24, -2, 4, 12, 4], "textureOffset": [0, 48], "sizeAdd": 0.25}, 50 | {"coordinates": [0, -24, -2, 4, 12, 4], "textureOffset": [0, 16]}, 51 | {"coordinates": [0, -24, -2, 4, 12, 4], "textureOffset": [0, 32], "sizeAdd": 0.25} 52 | ] 53 | } 54 | ], 55 | "animations": [ 56 | { 57 | "cancel.ry": "-rot_y" 58 | } 59 | ] 60 | }, 61 | { 62 | "part": "jacket", 63 | "id": "jacket", 64 | "invertAxis": "xy", 65 | "translate": [0, -24, 0] 66 | }, 67 | { 68 | "part": "left_arm", 69 | "id": "left_arm", 70 | "invertAxis": "xy", 71 | "translate": [5, -22, 0] 72 | }, 73 | { 74 | "part": "left_sleeve", 75 | "id": "left_sleeve", 76 | "invertAxis": "xy", 77 | "translate": [5, -22, 0] 78 | }, 79 | { 80 | "part": "right_arm", 81 | "id": "right_arm", 82 | "invertAxis": "xy", 83 | "translate": [-5, -22, 0] 84 | }, 85 | { 86 | "part": "right_sleeve", 87 | "id": "right_sleeve", 88 | "invertAxis": "xy", 89 | "translate": [-5, -22, 0] 90 | }, 91 | { 92 | "part": "left_leg", 93 | "id": "left_leg", 94 | "invertAxis": "xy", 95 | "translate": [2, -12, 0] 96 | }, 97 | { 98 | "part": "left_pants", 99 | "id": "left_pants", 100 | "invertAxis": "xy", 101 | "translate": [2, -12, 0] 102 | }, 103 | { 104 | "part": "right_leg", 105 | "id": "right_leg", 106 | "invertAxis": "xy", 107 | "translate": [-2, -12, 0] 108 | }, 109 | { 110 | "part": "right_pants", 111 | "id": "right_pants", 112 | "invertAxis": "xy", 113 | "translate": [-2, -12, 0] 114 | } 115 | ] 116 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/custom_lightmaps.txt: -------------------------------------------------------------------------------- 1 | =============================================== 2 | Description of OptiFine's Custom Lightmaps 3 | Based on McPatcher's Custom Lightmaps 4 | =============================================== 5 | 6 | Custom Lightmaps 7 | ================ 8 | 9 | OptiFine allows you to customize the lighting in the game. 10 | 11 | How lighting works in vanilla 12 | ============================= 13 | 14 | Every block has two light values from 0 to 15 assigned to it, one for sky brightness and one for torch brightness. 15 | A block in direct sunlight has a sky value of 15. A block in the shade directly adjacent to it has a value of 14 and so on. 16 | Blocks deep underground far from any block that can see the sky have sky brightness 0. Similarly for torches. 17 | A torch block has light value 14 (15 for glowstone) and the light value drops by 1 each block away from it. 18 | 19 | To generate the lighting you actually see in game, Minecraft uses a 16x16 lightmap. 20 | Its axes correspond to the 16 light levels of each type. If a block has torch brightness x and sky brightness y, 21 | then the point (x,y) is used for its lightmap coordinates. The lightmap is not in any of the game's files but is generated each frame. 22 | Two variables affect the lightmap, the time of day and the torch flicker. Minecraft implements dusk/dawn transitions and torch flicker 23 | by making the entire lightmap darker or lighter rather than by adjusting the sky/torch brightness values. 24 | 25 | Custom lighting 26 | =============== 27 | 28 | To create custom lighting, you will need a lightmap palette for each world: 29 | 30 | Nether: assets/minecraft/optifine/lightmap/world-1.png 31 | Overworld: assets/minecraft/optifine/lightmap/world0.png 32 | The End: assets/minecraft/optifine/lightmap/world1.png 33 | 34 | For the overworld you may also specify optional rain and thunder palettes: 35 | 36 | Overworld rain: assets/minecraft/optifine/lightmap/world0_rain.png 37 | Overworld thunder: assets/minecraft/optifine/lightmap/world0_thunder.png 38 | 39 | The rain and thunder palettes are only active when the main world palette is defined. 40 | 41 | Each palette can be any width, but must be 32 or 64 pixels tall. If it's 64, the bottom half is used for nightvision, discussed later. 42 | Of the 32 rows of pixels, the top 16 represent sunlight and the bottom 16 represent torchlight. 43 | Two columns, 16 pixels from the top half and 16 pixels from the bottom half, are chosen to form the axes of the final 16x16 lightmap 44 | used for rendering. 45 | 46 | Template: images/lightmap_template.png 47 | 48 | Blue=night, orange=dusk/dawn, cyan=day, yellow=lightning. 49 | 50 | In the top half, the left-hand side represents night and the right-hand side represents day, with the dusk/dawn transitions in between. 51 | The very far right of the palette represents lightning flashes. Again, there is no specified width for the palette, 52 | but more width means more room for detail in the transitions. 53 | 54 | Torches work similarly, but in this case the x coordinate is simply a random value simulating torch flicker. 55 | The variation along the x dimension will determine how noticable torch flicker is. 56 | To have completely steady torchlight with no flicker, make all pixels along each row the same color. 57 | 58 | Lightmaps work the same in all three worlds (Overworld, Nether, The End), but since there is no night or day in Nether and The End, 59 | the "time of day" value is constant. For these worlds you can simply give rows 0-15 the same color all the way across. 60 | 61 | Nightvision effect 62 | ================== 63 | 64 | In the vanilla game, the nightvision effect is computed by scaling the RGB values by 1.0 / max(R,G,B). 65 | For example, (0.2, 0.3, 0.6) would brighten to (0.333, 0.5, 1.0) after dividing by 0.6. 66 | You can override this behavior with a custom lightmap by making the height 64 pixels instead of 32. 67 | Provide four palettes instead of two: normal sun, normal torch, nightvision sun, nightvision torch. 68 | Lightmap generation works exactly the same way but using rows 32-47 and 48-63 instead. 69 | 70 | References 71 | ========== 72 | https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/allay.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [32, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -6, 0], 10 | "submodels": [ 11 | { 12 | "id": "swing1", 13 | "invertAxis": "xy", 14 | "translate": [0, 22, 0], 15 | "boxes": [ 16 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 17 | ], 18 | "submodels": [ 19 | { 20 | "id": "swing1_lower", 21 | "invertAxis": "xy", 22 | "translate": [0, -5, 0], 23 | "boxes": [ 24 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 25 | ] 26 | } 27 | ] 28 | }, 29 | { 30 | "id": "swing2", 31 | "invertAxis": "xy", 32 | "translate": [6, 11, 0], 33 | "boxes": [ 34 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 35 | ], 36 | "submodels": [ 37 | { 38 | "id": "swing2_lower", 39 | "invertAxis": "xy", 40 | "translate": [0, -5, 0], 41 | "boxes": [ 42 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 43 | ] 44 | } 45 | ] 46 | }, 47 | { 48 | "id": "swing3", 49 | "invertAxis": "xy", 50 | "translate": [0, 11, 0], 51 | "boxes": [ 52 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 53 | ], 54 | "submodels": [ 55 | { 56 | "id": "swing3_lower", 57 | "invertAxis": "xy", 58 | "translate": [0, -5, 0], 59 | "boxes": [ 60 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 61 | ] 62 | } 63 | ] 64 | }, 65 | { 66 | "id": "swing4", 67 | "invertAxis": "xy", 68 | "translate": [-6, 11, 0], 69 | "boxes": [ 70 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 71 | ], 72 | "submodels": [ 73 | { 74 | "id": "swing4_lower", 75 | "invertAxis": "xy", 76 | "translate": [0, -5, 0], 77 | "boxes": [ 78 | {"coordinates": [-2.5, -5, -2.5, 5, 5, 5], "textureOffset": [0, 0]} 79 | ] 80 | } 81 | ] 82 | } 83 | ], 84 | "animations": [ 85 | { 86 | "var.time": "time / 8" 87 | }, 88 | { 89 | "swing1.rx": "sin(var.time)", 90 | "swing1_lower.rx": "-cos(var.time)" 91 | }, 92 | { 93 | "swing2.rx": "sin(var.time)", 94 | "swing2_lower.rx": "max(0, -cos(var.time))" 95 | }, 96 | { 97 | "swing3.rx": "sin(var.time)", 98 | "swing3_lower.rx": "min(0, -cos(var.time))" 99 | }, 100 | { 101 | "swing4.rx": "sin(var.time)", 102 | "swing4_lower.rx": "clamp(-cos(var.time), torad(-20), torad(20))" 103 | } 104 | ] 105 | }, 106 | { 107 | "part": "body", 108 | "id": "body", 109 | "invertAxis": "xy", 110 | "translate": [0, -6, 0] 111 | }, 112 | { 113 | "part": "right_arm", 114 | "id": "right_arm", 115 | "invertAxis": "xy", 116 | "translate": [-1.75, -5.5, 0] 117 | }, 118 | { 119 | "part": "left_arm", 120 | "id": "left_arm", 121 | "invertAxis": "xy", 122 | "translate": [1.75, -5.5, 0] 123 | }, 124 | { 125 | "part": "left_wing", 126 | "id": "left_wing", 127 | "invertAxis": "xy", 128 | "translate": [0.5, -6, -1] 129 | }, 130 | { 131 | "part": "right_wing", 132 | "id": "right_wing", 133 | "invertAxis": "xy", 134 | "translate": [-0.5, -6, -1] 135 | } 136 | ] 137 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/piglin.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 64], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -24, 0] 10 | }, 11 | { 12 | "part": "left_ear", 13 | "id": "left_ear", 14 | "invertAxis": "xy", 15 | "translate": [4.5, -30, 0], 16 | "rotate": [0, 0, -35] 17 | }, 18 | { 19 | "part": "right_ear", 20 | "id": "right_ear", 21 | "invertAxis": "xy", 22 | "translate": [-4.5, -30, 0], 23 | "rotate": [0, 0, 35] 24 | }, 25 | { 26 | "part": "body", 27 | "id": "body", 28 | "invertAxis": "xy", 29 | "translate": [0, -24, 0], 30 | "submodels": [ 31 | { 32 | "id": "cancel", 33 | "invertAxis": "xy", 34 | "translate": [0, 0, 0], 35 | "submodels": [ 36 | { 37 | "id": "death", 38 | "invertAxis": "xy", 39 | "translate": [0, 0, 0], 40 | "boxes": [ 41 | {"coordinates": [0, 0, -2, 4, 12, 4], "textureOffset": [0, 32], "sizeAdd": 0.25}, 42 | {"coordinates": [0, 0, -2, 4, 12, 4], "textureOffset": [0, 16]}, 43 | {"coordinates": [-4, 0, -2, 4, 12, 4], "textureOffset": [0, 48], "sizeAdd": 0.25}, 44 | {"coordinates": [-4, 0, -2, 4, 12, 4], "textureOffset": [16, 48]}, 45 | {"coordinates": [4, 12, -2, 4, 12, 4], "textureOffset": [40, 32], "sizeAdd": 0.25}, 46 | {"coordinates": [4, 12, -2, 4, 12, 4], "textureOffset": [40, 16]}, 47 | {"coordinates": [-8, 12, -2, 4, 12, 4], "textureOffset": [48, 48], "sizeAdd": 0.25}, 48 | {"coordinates": [-8, 12, -2, 4, 12, 4], "textureOffset": [32, 48]}, 49 | {"coordinates": [-4, 12, -2, 8, 12, 4], "textureOffset": [16, 32], "sizeAdd": 0.25}, 50 | {"coordinates": [4.5, 25, -2, 1, 5, 4], "textureOffset": [39, 6]}, 51 | {"coordinates": [-5.5, 25, -2, 1, 5, 4], "textureOffset": [51, 6]}, 52 | {"coordinates": [-5, 24, -4, 10, 8, 8], "textureOffset": [0, 0]}, 53 | {"coordinates": [-2, 24, -5, 4, 4, 1], "textureOffset": [31, 1]}, 54 | {"coordinates": [-3, 24, -5, 1, 2, 1], "textureOffset": [2, 4]}, 55 | {"coordinates": [2, 24, -5, 1, 2, 1], "textureOffset": [2, 0]}, 56 | {"coordinates": [-4, 12, -2, 8, 12, 4], "textureOffset": [16, 16]} 57 | ] 58 | } 59 | ] 60 | } 61 | ], 62 | "animations": [ 63 | { 64 | "cancel.rz": "if(death_time > 0, -torad(min(sqrt((death_time - 1) / 20 * 1.6), 1) * 90), 0)", 65 | "death.ty": "-death_time * 2" 66 | } 67 | ] 68 | }, 69 | { 70 | "part": "jacket", 71 | "id": "jacket", 72 | "invertAxis": "xy", 73 | "translate": [0, -24, 0] 74 | }, 75 | { 76 | "part": "left_arm", 77 | "id": "left_arm", 78 | "invertAxis": "xy", 79 | "translate": [5, -22, 0] 80 | }, 81 | { 82 | "part": "left_sleeve", 83 | "id": "left_sleeve", 84 | "invertAxis": "xy", 85 | "translate": [5, -22, 0] 86 | }, 87 | { 88 | "part": "right_arm", 89 | "id": "right_arm", 90 | "invertAxis": "xy", 91 | "translate": [-5, -22, 0] 92 | }, 93 | { 94 | "part": "right_sleeve", 95 | "id": "right_sleeve", 96 | "invertAxis": "xy", 97 | "translate": [-5, -22, 0] 98 | }, 99 | { 100 | "part": "left_leg", 101 | "id": "left_leg", 102 | "invertAxis": "xy", 103 | "translate": [2, -12, 0] 104 | }, 105 | { 106 | "part": "left_pants", 107 | "id": "left_pants", 108 | "invertAxis": "xy", 109 | "translate": [2, -12, 0] 110 | }, 111 | { 112 | "part": "right_leg", 113 | "id": "right_leg", 114 | "invertAxis": "xy", 115 | "translate": [-2, -12, 0] 116 | }, 117 | { 118 | "part": "right_pants", 119 | "id": "right_pants", 120 | "invertAxis": "xy", 121 | "translate": [-2, -12, 0] 122 | } 123 | ] 124 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/CEM Animation Examples/assets/minecraft/optifine/cem/spider.jem: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "textureSize": [64, 32], 4 | "models": [ 5 | { 6 | "part": "head", 7 | "id": "head", 8 | "invertAxis": "xy", 9 | "translate": [0, -9, 3] 10 | }, 11 | { 12 | "part": "neck", 13 | "id": "neck", 14 | "invertAxis": "xy", 15 | "translate": [0, -9, 0] 16 | }, 17 | { 18 | "part": "body", 19 | "id": "body", 20 | "invertAxis": "xy", 21 | "translate": [0, -9, -9], 22 | "submodels": [ 23 | { 24 | "id": "normal", 25 | "invertAxis": "xy", 26 | "translate": [0, 9, 9], 27 | "submodels": [ 28 | { 29 | "id": "left_leg", 30 | "invertAxis": "xy", 31 | "translate": [-3, 3, -25], 32 | "boxes": [ 33 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 34 | ] 35 | }, 36 | { 37 | "id": "right_leg", 38 | "invertAxis": "xy", 39 | "translate": [3, 3, -25], 40 | "boxes": [ 41 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 42 | ] 43 | } 44 | ] 45 | }, 46 | { 47 | "id": "fast", 48 | "invertAxis": "xy", 49 | "translate": [0, 9, 9], 50 | "submodels": [ 51 | { 52 | "id": "left_leg_fast", 53 | "invertAxis": "xy", 54 | "translate": [-3, 3, -9], 55 | "boxes": [ 56 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 57 | ] 58 | }, 59 | { 60 | "id": "right_leg_fast", 61 | "invertAxis": "xy", 62 | "translate": [3, 3, -9], 63 | "boxes": [ 64 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 65 | ] 66 | } 67 | ] 68 | }, 69 | { 70 | "id": "far", 71 | "invertAxis": "xy", 72 | "translate": [0, 9, 9], 73 | "submodels": [ 74 | { 75 | "id": "left_leg_far", 76 | "invertAxis": "xy", 77 | "translate": [-3, 3, 7], 78 | "boxes": [ 79 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 80 | ] 81 | }, 82 | { 83 | "id": "right_leg_far", 84 | "invertAxis": "xy", 85 | "translate": [3, 3, 7], 86 | "boxes": [ 87 | {"coordinates": [-2, -12, -2, 4, 12, 4], "textureOffset": [12, 12]} 88 | ] 89 | } 90 | ] 91 | } 92 | ], 93 | "animations": [ 94 | { 95 | "left_leg.rx": "sin(limb_swing) * limb_speed", 96 | "right_leg.rx": "-sin(limb_swing) * limb_speed" 97 | }, 98 | { 99 | "left_leg_fast.rx": "sin(limb_swing * 3) * limb_speed", 100 | "right_leg_fast.rx": "-sin(limb_swing * 3) * limb_speed" 101 | }, 102 | { 103 | "left_leg_far.rx": "sin(limb_swing) * limb_speed * 3", 104 | "right_leg_far.rx": "-sin(limb_swing) * limb_speed * 3" 105 | } 106 | ] 107 | }, 108 | { 109 | "part": "leg1", 110 | "id": "leg1", 111 | "invertAxis": "xy", 112 | "translate": [-4, -9, -4] 113 | }, 114 | { 115 | "part": "leg2", 116 | "id": "leg2", 117 | "invertAxis": "xy", 118 | "translate": [4, -9, -4] 119 | }, 120 | { 121 | "part": "leg3", 122 | "id": "leg3", 123 | "invertAxis": "xy", 124 | "translate": [-4, -9, -1] 125 | }, 126 | { 127 | "part": "leg4", 128 | "id": "leg4", 129 | "invertAxis": "xy", 130 | "translate": [4, -9, -1] 131 | }, 132 | { 133 | "part": "leg5", 134 | "id": "leg5", 135 | "invertAxis": "xy", 136 | "translate": [-4, -9, 2] 137 | }, 138 | { 139 | "part": "leg6", 140 | "id": "leg6", 141 | "invertAxis": "xy", 142 | "translate": [4, -9, 2] 143 | }, 144 | { 145 | "part": "leg7", 146 | "id": "leg7", 147 | "invertAxis": "xy", 148 | "translate": [-4, -9, 5] 149 | }, 150 | { 151 | "part": "leg8", 152 | "id": "leg8", 153 | "invertAxis": "xy", 154 | "translate": [4, -9, 5] 155 | } 156 | ] 157 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/mjolnir.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "texture_size": [64, 32], 4 | "textures": { 5 | "particle": "entity/trident/mjolnir", 6 | "trident": "entity/trident/mjolnir" 7 | }, 8 | "elements": [ 9 | { 10 | "from": [-4.5, 25, -3], 11 | "to": [4.5, 31, 3], 12 | "rotation": {"angle": 0, "axis": "y", "origin": [-0.5, 29, 1]}, 13 | "faces": { 14 | "north": {"uv": [1.5, 3, 3.75, 6], "texture": "#trident"}, 15 | "east": {"uv": [0, 3, 1.5, 6], "texture": "#trident"}, 16 | "south": {"uv": [5.25, 3, 7.5, 6], "texture": "#trident"}, 17 | "west": {"uv": [3.75, 3, 5.25, 6], "texture": "#trident"}, 18 | "up": {"uv": [3.75, 3, 1.5, 0], "texture": "#trident"}, 19 | "down": {"uv": [6, 0, 3.75, 3], "texture": "#trident"} 20 | } 21 | }, 22 | { 23 | "from": [-2, 30.5, -2], 24 | "to": [2, 31.5, 2], 25 | "rotation": {"angle": 0, "axis": "y", "origin": [-1, 29.5, 0]}, 26 | "faces": { 27 | "north": {"uv": [1, 13, 2, 13.5], "texture": "#trident"}, 28 | "east": {"uv": [0, 13, 1, 13.5], "texture": "#trident"}, 29 | "south": {"uv": [3, 13, 4, 13.5], "texture": "#trident"}, 30 | "west": {"uv": [2, 13, 3, 13.5], "texture": "#trident"}, 31 | "up": {"uv": [2, 13, 1, 11], "texture": "#trident"} 32 | } 33 | }, 34 | { 35 | "from": [-5, 25.5, -2.5], 36 | "to": [5, 30.5, 2.5], 37 | "rotation": {"angle": 0, "axis": "y", "origin": [0, 29.5, 0.5]}, 38 | "faces": { 39 | "north": {"uv": [1.25, 8.5, 3.75, 11], "texture": "#trident"}, 40 | "east": {"uv": [0, 8.5, 1.25, 11], "texture": "#trident"}, 41 | "south": {"uv": [5, 8.5, 7.5, 11], "texture": "#trident"}, 42 | "west": {"uv": [3.75, 8.5, 5, 11], "texture": "#trident"}, 43 | "up": {"uv": [3.75, 8.5, 1.25, 6], "texture": "#trident"}, 44 | "down": {"uv": [6.25, 6, 3.75, 8.5], "texture": "#trident"} 45 | } 46 | }, 47 | { 48 | "from": [-1, 14, -1], 49 | "to": [1, 25, 1], 50 | "rotation": {"angle": 0, "axis": "y", "origin": [-1, 23, 0]}, 51 | "faces": { 52 | "north": {"uv": [8, 1, 8.5, 6.5], "texture": "#trident"}, 53 | "east": {"uv": [7.5, 1, 8, 6.5], "texture": "#trident"}, 54 | "south": {"uv": [9, 1, 9.5, 6.5], "texture": "#trident"}, 55 | "west": {"uv": [8.5, 1, 9, 6.5], "texture": "#trident"}, 56 | "down": {"uv": [9, 0, 8.5, 1], "texture": "#trident"} 57 | } 58 | }, 59 | { 60 | "from": [-1, 10, 0.99], 61 | "to": [1, 14, 0.99], 62 | "rotation": {"angle": 45, "axis": "z", "origin": [-1, 14, 0]}, 63 | "faces": { 64 | "north": {"uv": [8, 7.5, 8.5, 9.5], "texture": "#trident"}, 65 | "south": {"uv": [9, 7.5, 9.5, 9.5], "texture": "#trident"} 66 | } 67 | }, 68 | { 69 | "from": [-1, 10, -0.99], 70 | "to": [1, 14, -0.99], 71 | "rotation": {"angle": 45, "axis": "z", "origin": [-1, 14, 0]}, 72 | "faces": { 73 | "north": {"uv": [8, 7.5, 8.5, 9.5], "texture": "#trident"}, 74 | "south": {"uv": [9, 7.5, 9.5, 9.5], "texture": "#trident"} 75 | } 76 | }, 77 | { 78 | "from": [-1, 10, -1], 79 | "to": [1, 10, 1], 80 | "rotation": {"angle": 45, "axis": "z", "origin": [-1, 14, 0]}, 81 | "faces": { 82 | "up": {"uv": [9, 6.5, 8.5, 7.5], "texture": "#trident"}, 83 | "down": {"uv": [9, 6.5, 8.5, 7.5], "texture": "#trident"} 84 | } 85 | } 86 | ], 87 | "display": { 88 | "thirdperson_righthand": { 89 | "rotation": [0, 60, 0], 90 | "translation": [11, -10, -2] 91 | }, 92 | "thirdperson_lefthand": { 93 | "rotation": [0, 60, 0], 94 | "translation": [3, -10, 12] 95 | }, 96 | "firstperson_righthand": { 97 | "rotation": [0, -90, 25], 98 | "translation": [-3, -7.5, 12.4] 99 | }, 100 | "firstperson_lefthand": { 101 | "rotation": [0, 90, -25], 102 | "translation": [13, -7.5, 12.4] 103 | }, 104 | "ground": { 105 | "rotation": [0, 0, -135], 106 | "translation": [-8, 6, 4], 107 | "scale": [0.5, 0.5, 0.5] 108 | }, 109 | "gui": { 110 | "rotation": [30, 45, 0], 111 | "translation": [8.25, -9.75, 0], 112 | "scale": [0.75, 0.75, 0.75] 113 | }, 114 | "head": { 115 | "rotation": [0, 0, -135], 116 | "translation": [-19, 18, 8] 117 | }, 118 | "fixed": { 119 | "rotation": [0, 0, 45], 120 | "translation": [16, -6, 8] 121 | } 122 | }, 123 | "groups": [ 124 | { 125 | "name": "body", 126 | "origin": [0, 27, 0], 127 | "color": 0, 128 | "children": [ 129 | 0, 130 | 1, 131 | 2, 132 | 3, 133 | { 134 | "name": "strap", 135 | "origin": [-1, 14, 0], 136 | "rotation": [0, 0, 22.5], 137 | "color": 0, 138 | "children": [4, 5, 6] 139 | } 140 | ] 141 | } 142 | ] 143 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/colormap.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Colors feature. 3 | # Based on the configuration for MCPatcher's Custom Colors mod. 4 | # 5 | ############################################################################### 6 | # colormap.properties 7 | ############################################################################### 8 | # Each custom colormap must have a properties file, except for "fixed" 9 | # colormaps like pine.png or underwater.png. 10 | # 11 | # This file is offered without any copyright restrictions. Please copy and 12 | # modify it to suit your needs. Then place it in the optifine/colormap/blocks 13 | # folder or any subfolder within. 14 | # 15 | # All property names are case-sensitive. 16 | # All colors are in hex rgb format, 000000 to ffffff. 17 | # All paths are relative to assets/minecraft unless otherwise stated. 18 | ############################################################################### 19 | 20 | ############################################################################### 21 | # Format of colormap. 22 | ############################################################################### 23 | # fixed: Single fixed color, no image required. Useful for removing vanilla 24 | # biome coloring without having to create a 256x256 all-white 25 | # colormap. 26 | # vanilla: Vanilla temperature+humidity 256x256 map. Limited by the fact that 27 | # different biomes share the same base temp+humidity values. 28 | # grid: OptiFine-style grid (x=biome ID, y=height) 256x256 map. Each 29 | # column represents a single biome from the void to the max build 30 | # height. Unused columns should be filled in with a reasonable 31 | # default gradient of colors to accommodate biomes added by mods. 32 | # The default format is vanilla, but this can be overridden globally by setting 33 | # palette.format in ~/color.properties. 34 | format= 35 | 36 | ############################################################################### 37 | # (Optional) List of blocks (with optional properties) to apply the colormap to. 38 | ############################################################################### 39 | # In 1.7, blocks are referred to by name rather than number. Numerical IDs are 40 | # supported for older blocks, but newer blocks will be name only. Stone blocks 41 | # for example can be referred to as 42 | # stone (name without prefix) 43 | # minecraft:stone (full name) 44 | # 45 | # To color all stone and ore blocks: 46 | # blocks=stone gold_ore iron_ore coal_ore lapis_ore diamond_ore redstone_ore redstone_ore:lit=true 47 | # 48 | # Block + properties is also supported using the following syntax: 49 | # blocks=minecraft:lever:face=wall:facing=east,west 50 | # 51 | # If not set (or if there is no properties file), it defaults based on the 52 | # filename, e.g., 53 | # assets/minecraft/optifine/colormap/custom/stone.png -> minecraft:stone 54 | blocks= 55 | 56 | ############################################################################### 57 | # (format=fixed or vanilla only) Color map image. 58 | ############################################################################### 59 | # Path can be relative to the location of the properties file. The image 60 | # should be a 256x256 color map. If no source is given, a png with the same 61 | # name as the properties file is used as a default. 62 | source= 63 | 64 | ############################################################################### 65 | # (Optional) Fixed RGB color. 66 | ############################################################################### 67 | # For format=fixed, this is simply the fixed color to be applied to all 68 | # matching blocks. If no value is given, the default is white (ffffff). 69 | # 70 | # For format=vanilla or grid, this is the default color used for held or 71 | # dropped blocks. If no value is given, the default color is instead taken 72 | # from a fixed location depending on the format: 73 | # format=vanilla: x=127,y=127 (center of bitmap) 74 | # format=grid: x=1,y=64 (plains biome at sea level) 75 | color= 76 | 77 | ############################################################################### 78 | # (format=grid only) y variance value. 79 | ############################################################################### 80 | # This adds a configurable amount of random noise to the y coordinate before it 81 | # is used in the colormap. For example a value of 2.0 will choose a value 82 | # from the the colormap from y - 2 to y + 2. 83 | # The default is 0 (no variance). 84 | yVariance= 85 | 86 | ############################################################################### 87 | # (format=grid only) y offset value. 88 | ############################################################################### 89 | # This subtracts a fixed value from the block's y coordinate before sampling 90 | # from the colormap. For example a value of 64 will use the pixel at 0 for 91 | # blocks between layer 0 and 64. A block at 65 will use pixel 1, 66 pixel 2, 92 | # etc. 93 | # The default is 0 (no offset). 94 | yOffset= -------------------------------------------------------------------------------- /OptiFineDoc/doc/cem_part.txt: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Json Part Model 3 | # Reference configuration for OptiFine's feature Custom Entity Models 4 | ###################################################################### 5 | # This file contains the definition of one model part and it can be 6 | # referenced as "model" from the entity model. 7 | # The file extension ".jpm" is recommended, but not required. 8 | # It should be located in the "assets/minecraft/optifine/cem" folder of your resource pack. 9 | # 10 | # Texture UV can be specified in box format with "textureOffset" or 11 | # individually with "uvDown", "uvUp", "uvNorth", "uvSouth", "uvWest" and "uvEast". 12 | # Either the box format or the individual face UV should be used, they can not be mixed. 13 | # The box format UV mapping is shown in "model_box.png". 14 | # 15 | # Textures can be specified as: 16 | # "texture" - (no '/' in name), look in current folder 17 | # "./folder/texture" - relative to current folder 18 | # "~/folder/texture" - relative to folder "assets/minecraft/optifine/" 19 | # "folder/texture" - relative to folder "assets/minecraft/" 20 | # "mod:folder/texture - resolves as "assets/mod/folder/texture.png" 21 | # 22 | # The texture suffix ".png" is optional. 23 | # 24 | # Required elements: 25 | # - "textureOffset" or individual face UV 26 | # - "coordinates" 27 | # 28 | # Entities can have items/blocks attached to them. The attachments system allows you to render these items/blocks attached to model parts of your choice. 29 | # 30 | # Attachment name Supported models 31 | # ======================== ====================================================== 32 | # left_handheld_item allay, armor_stand, drowned, evoker, giant, husk, illusioner, piglin, piglin_brute, pillager, skeleton, stray, vex, vindicator, 33 | # wither_skeleton, zombie, zombie_villager, zombified_piglin 34 | # right_handheld_item allay, armor_stand, drowned, evoker, giant, husk, illusioner, piglin, piglin_brute, pillager, skeleton, stray, vex, vindicator, 35 | # wither_skeleton, zombie, zombie_villager, zombified_piglin 36 | # 37 | # Note: This is not a valid JSON format and it should only be used as a reference 38 | ###################################################################### 39 | { 40 | # Part model definition 41 | "texture": , - Texture used by the part model 42 | "textureSize": [, ], - Texture size in pixels 43 | "invertAxis": , - Axis to invert, for example "xyz" inverts all axes 44 | "translate": [, , ], - Translate (pixels) 45 | "rotate": [, , ], - Rotate (degrees) 46 | "mirrorTexture": , - Texture axis to mirror, for example "uv" mirrors both U and V axis 47 | "attachments": - Attachment points for vanilla rendering 48 | { 49 | "attachment_name": [tx, ty, tz] - Render an attachment with translation (tx, ty, tz). See attachment section for details. 50 | }, 51 | "boxes": - List of part model boxes 52 | [ 53 | { 54 | "textureOffset": [, ], - Texture offset for box format, see "model_box.png" 55 | "uvDown": [, , , ], - UV for face down 56 | "uvUp": [, , , ], - UV for face up 57 | "uvNorth": [, , , ], - UV for face north, alias "uvFront" 58 | "uvSouth": [, , , ], - UV for face south, alias "uvBack" 59 | "uvWest": [, , , ], - UV for face west, alias "uvLeft" 60 | "uvEast": [, , , ], - UV for face east, alias "uvRight" 61 | "coordinates": [, , , , , ], - Box position and dimensions 62 | "sizeAdd": , - Size increment (added to all dimensions) can be used for asymmetric scaling 63 | "sizesAdd": [, , ] - Separate size increments can be used for asymmetric scaling 64 | }, 65 | ... 66 | ], 67 | "sprites" - List of 3D sprite models (depth 1) 68 | [ 69 | { 70 | "textureOffset": [, ], - Texture offset (pixels) 71 | "coordinates": [, , , , , ], - Box position and dimensions 72 | "sizeAdd": - Size increment (added to all dimensions) can be used for asymmetric scaling 73 | }, 74 | ... 75 | ], 76 | "submodel": - Sub-model (attached to the parent, moving and rotating with it) 77 | { 78 | # Part model definition - Sub-model definition 79 | }, 80 | "submodels": - List of sub-models (attached to the parent, moving and rotating with it) 81 | [ 82 | { 83 | # Part model definition - Sub-model definition 84 | }, 85 | ... 86 | ] 87 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/custom_guis.properties: -------------------------------------------------------------------------------- 1 | #################################################### 2 | # Description of OptiFine's Custom GUIs feature 3 | #################################################### 4 | # For each container GUI texture that you wish to override, use this template 5 | # and create a .properties file in the "assets/minecraft/optifine/gui/container" 6 | # folder of your resource pack. Properties files can be organized 7 | # into subfolders of any depth, as long as everything is within the top-level 8 | # "assets/minecraft/optifine/gui/container" folder. 9 | # 10 | # Different container types have different requirements and restrictions. 11 | # See below for details for each container type. 12 | # 13 | #################################################### 14 | # General properties 15 | # 16 | # Container (required) 17 | # Values: 18 | # anvil beacon brewing_stand chest crafting dispenser enchantment furnace 19 | # hopper horse villager shulker_box creative inventory 20 | container= 21 | # 22 | # Texture (required) 23 | # Replacement for the GUI texture 24 | # The "texture" property replaces the default GUI texture. 25 | # The "texture." property can be used to replace any GUI texture 26 | # is relative to "/assets/minecraft/textures/gui" 27 | # The creative inventory GUI does not have a default texture so it has to use path textures. 28 | # 29 | # Example for creative inventory: 30 | # # File "assets/minecraft/optifine/gui/container/creative/creative_desert.properties 31 | # container=creative 32 | # biomes=desert 33 | # texture.container/creative_inventory/tab_inventory=tab_inventory_desert 34 | # texture.container/creative_inventory/tabs=tabs_desert 35 | # texture.container/creative_inventory/tab_items=tab_items_desert 36 | # texture.container/creative_inventory/tab_item_search=tab_item_search_desert 37 | # 38 | # At least one "texture" or "texture." is required. 39 | texture= 40 | texture.= 41 | # 42 | # Custom entity or block entity name (optional) 43 | # 44 | # The name uses the syntax similar to the Custom Item Textures NBT tags. 45 | # A value starting with "!" performs a negative match (not). 46 | # 47 | # Examples: 48 | # - Match name: 49 | # name=My Sword 50 | # 51 | # - Match name with special formatting: 52 | # NOTE: For best compatibility, use the escape sequence '\u00a7' instead of '§': 53 | # name=\u00a74\u00a7oMy Sword 54 | # 55 | # - Wildcards using ? and * 56 | # name=pattern:Letter to * 57 | # Matches 58 | # Letter to Herobrine 59 | # Letter to a creeper 60 | # but not 61 | # letter to Herobrine 62 | # 63 | # - Wildcards, case insensitive 64 | # name=ipattern:Letter to * 65 | # Matches 66 | # Letter to Herobrine 67 | # Letter to a creeper 68 | # letter to Herobrine 69 | # 70 | # - Java regular expressions 71 | # (See http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html) 72 | # name=regex:Letter (to|from) .* 73 | # Matches 74 | # Letter to Herobrine 75 | # Letter from Herobrine 76 | # but not 77 | # letter to Herobrine 78 | # A Letter to Herobrine 79 | # 80 | # - Java regular expressions, case insensitive 81 | # name=iregex:Letter (to|from) .* 82 | # Matches 83 | # Letter to Herobrine 84 | # Letter from Herobrine 85 | # letter to Herobrine 86 | # but not 87 | # A Letter to Herobrine 88 | # 89 | # NOTE: Any backslashes must be doubled as well. Literal backslashes within a 90 | # regular expression or wildcard must be quadrupled. 91 | # Correct: 92 | # name=regex:\\d+ 93 | # name=regex:\\\\ 94 | # name=/\\/\\ 95 | # Wrong: 96 | # name=regex:\d+ 97 | # name=regex:\\ 98 | # name=/\/\ 99 | name= 100 | # 101 | # Biomes (optional) 102 | # The vanilla biome names are listed here: https://minecraft.wiki/w/Biome#Biome_IDs 103 | # Biomes added by mods can also be used. 104 | biomes= 105 | # 106 | # Heights (optional) 107 | # Since 1.18 negative values may be specified for height. When used in a range they have to be put in brackets. 108 | heights= 109 | # 110 | #################################################### 111 | # Chest specific properties 112 | # 113 | # Large chest (optional) 114 | large= 115 | # 116 | # Trapped chest (optinal) 117 | trapped= 118 | # 119 | # Christmas chest (optional) 120 | christmas= 121 | # 122 | # Ender chest (optional) 123 | ender= 124 | # 125 | #################################################### 126 | # Beacon specific properties 127 | # 128 | # Levels (optional) 129 | levels= 130 | # 131 | #################################################### 132 | # Villager specific properties 133 | # 134 | # Professions (optional) 135 | # List of villager professions with optional levels 136 | # 137 | # Entry format 138 | # [:level1,level2,...] 139 | # 140 | # Professions: none, armorer, butcher, cartographer, cleric, farmer, fisherman, fletcher, 141 | # leatherworker, librarian, mason, nitwit, shepherd, toolsmith, weaponsmith 142 | # 143 | # Example: 144 | # # Professions farmer (all levels) or librarian (levels 1,3,4) 145 | # professions=farmer librarian:1,3-4 146 | # # Professions full 147 | # professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit 148 | professions= 149 | # 150 | #################################################### 151 | # Horse and dispenser specific properties 152 | # 153 | # Variants (optional) 154 | # Horse variants: horse donkey mule llama 155 | # Dispenser variants: dispenser dropper 156 | variants= 157 | # 158 | #################################################### 159 | # Lllama and shulker box specific properties 160 | # 161 | # Colors (optional) 162 | # Shulker box color or llama carpet color 163 | # List of colors: white orange magenta light_blue yellow lime pink gray light_gray cyan purple blue brown green red black 164 | colors= 165 | # -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/Trident CIT/assets/minecraft/models/item/quindent_in_hand.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "By Ewan Howell", 3 | "parent": "item/trident_in_hand", 4 | "textures": { 5 | "trident": "entity/trident/quindent", 6 | "particle": "item/quindent" 7 | }, 8 | "elements": [ 9 | { 10 | "name": "body", 11 | "from": [-1.5, 21, -0.5], 12 | "to": [1.5, 27, 0.5], 13 | "faces": { 14 | "north": {"uv": [2.5, 2, 4, 5], "texture": "#trident"}, 15 | "east": {"uv": [2, 2, 2.5, 5], "texture": "#trident"}, 16 | "south": {"uv": [4.5, 2, 6, 5], "texture": "#trident"}, 17 | "west": {"uv": [4, 2, 4.5, 5], "texture": "#trident"}, 18 | "up": {"uv": [4, 2, 2.5, 1.5], "texture": "#trident"}, 19 | "down": {"uv": [5.5, 1.5, 4, 2], "texture": "#trident"} 20 | } 21 | }, 22 | { 23 | "name": "body", 24 | "from": [-0.5, 27, -0.5], 25 | "to": [0.5, 31, 0.5], 26 | "faces": { 27 | "north": {"uv": [0.5, 0.5, 1, 2.5], "texture": "#trident"}, 28 | "east": {"uv": [0, 0.5, 0.5, 2.5], "texture": "#trident"}, 29 | "south": {"uv": [1.5, 0.5, 2, 2.5], "texture": "#trident"}, 30 | "west": {"uv": [1, 0.5, 1.5, 2.5], "texture": "#trident"}, 31 | "up": {"uv": [1, 0.5, 0.5, 0], "texture": "#trident"}, 32 | "down": {"uv": [1.5, 0, 1, 0.5], "texture": "#trident"} 33 | } 34 | }, 35 | { 36 | "name": "body", 37 | "from": [-0.5, 0, -0.5], 38 | "to": [0.5, 21, 0.5], 39 | "faces": { 40 | "north": {"uv": [1, 5.5, 0.5, 16], "texture": "#trident"}, 41 | "east": {"uv": [1.5, 5.5, 1, 16], "texture": "#trident"}, 42 | "south": {"uv": [2, 5.5, 1.5, 16], "texture": "#trident"}, 43 | "west": {"uv": [0.5, 5.5, 0, 16], "texture": "#trident"}, 44 | "up": {"uv": [0.5, 5.5, 1, 5], "texture": "#trident"}, 45 | "down": {"uv": [1, 5, 1.5, 5.5], "texture": "#trident"} 46 | } 47 | }, 48 | { 49 | "name": "body", 50 | "from": [3.5, 25, -0.5], 51 | "to": [4.5, 29, 0.5], 52 | "faces": { 53 | "north": {"uv": [2.5, 5.5, 3, 7.5], "texture": "#trident"}, 54 | "east": {"uv": [2, 5.5, 2.5, 7.5], "texture": "#trident"}, 55 | "south": {"uv": [3.5, 5.5, 4, 7.5], "texture": "#trident"}, 56 | "west": {"uv": [3, 5.5, 3.5, 7.5], "texture": "#trident"}, 57 | "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#trident"}, 58 | "down": {"uv": [3.5, 5, 3, 5.5], "texture": "#trident"} 59 | } 60 | }, 61 | { 62 | "name": "body", 63 | "from": [1.5, 26, -0.5], 64 | "to": [2.5, 30, 0.5], 65 | "faces": { 66 | "north": {"uv": [2.5, 5.5, 3, 7.5], "texture": "#trident"}, 67 | "east": {"uv": [2, 5.5, 2.5, 7.5], "texture": "#trident"}, 68 | "south": {"uv": [3.5, 5.5, 4, 7.5], "texture": "#trident"}, 69 | "west": {"uv": [3, 5.5, 3.5, 7.5], "texture": "#trident"}, 70 | "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#trident"}, 71 | "down": {"uv": [3.5, 5, 3, 5.5], "texture": "#trident"} 72 | } 73 | }, 74 | { 75 | "name": "body", 76 | "from": [-4.5, 25, -0.5], 77 | "to": [-3.5, 29, 0.5], 78 | "faces": { 79 | "north": {"uv": [2.5, 5.5, 3, 7.5], "texture": "#trident"}, 80 | "east": {"uv": [2, 5.5, 2.5, 7.5], "texture": "#trident"}, 81 | "south": {"uv": [3.5, 5.5, 4, 7.5], "texture": "#trident"}, 82 | "west": {"uv": [3, 5.5, 3.5, 7.5], "texture": "#trident"}, 83 | "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#trident"}, 84 | "down": {"uv": [3.5, 5, 3, 5.5], "texture": "#trident"} 85 | } 86 | }, 87 | { 88 | "name": "body", 89 | "from": [2.5, 24, -0.5], 90 | "to": [3.5, 26, 0.5], 91 | "faces": { 92 | "north": {"uv": [4.5, 4, 5, 5], "texture": "#trident"}, 93 | "east": {"uv": [4, 4, 4.5, 5], "texture": "#trident"}, 94 | "south": {"uv": [5.5, 4, 6, 5], "texture": "#trident"}, 95 | "west": {"uv": [5, 4, 5.5, 5], "texture": "#trident"}, 96 | "up": {"uv": [5, 4, 4.5, 3.5], "texture": "#trident"}, 97 | "down": {"uv": [5.5, 3.5, 5, 4], "texture": "#trident"} 98 | } 99 | }, 100 | { 101 | "name": "body", 102 | "from": [-3.5, 24, -0.5], 103 | "to": [-2.5, 26, 0.5], 104 | "faces": { 105 | "north": {"uv": [4.5, 4, 5, 5], "texture": "#trident"}, 106 | "east": {"uv": [4, 4, 4.5, 5], "texture": "#trident"}, 107 | "south": {"uv": [5.5, 4, 6, 5], "texture": "#trident"}, 108 | "west": {"uv": [5, 4, 5.5, 5], "texture": "#trident"}, 109 | "up": {"uv": [5, 4, 4.5, 3.5], "texture": "#trident"}, 110 | "down": {"uv": [5.5, 3.5, 5, 4], "texture": "#trident"} 111 | } 112 | }, 113 | { 114 | "name": "body", 115 | "from": [-2.5, 23, -0.5], 116 | "to": [2.5, 25, 0.5], 117 | "faces": { 118 | "north": {"uv": [2.5, 0.5, 5, 1.5], "texture": "#trident"}, 119 | "east": {"uv": [2, 0.5, 2.5, 1.5], "texture": "#trident"}, 120 | "south": {"uv": [5.5, 0.5, 8, 1.5], "texture": "#trident"}, 121 | "west": {"uv": [5, 0.5, 5.5, 1.5], "texture": "#trident"}, 122 | "up": {"uv": [5, 0.5, 2.5, 0], "texture": "#trident"}, 123 | "down": {"uv": [7.5, 0, 5, 0.5], "texture": "#trident"} 124 | } 125 | }, 126 | { 127 | "name": "body", 128 | "from": [-2.5, 26, -0.5], 129 | "to": [-1.5, 30, 0.5], 130 | "faces": { 131 | "north": {"uv": [2.5, 5.5, 3, 7.5], "texture": "#trident"}, 132 | "east": {"uv": [2, 5.5, 2.5, 7.5], "texture": "#trident"}, 133 | "south": {"uv": [3.5, 5.5, 4, 7.5], "texture": "#trident"}, 134 | "west": {"uv": [3, 5.5, 3.5, 7.5], "texture": "#trident"}, 135 | "up": {"uv": [3, 5.5, 2.5, 5], "texture": "#trident"}, 136 | "down": {"uv": [3.5, 5, 3, 5.5], "texture": "#trident"} 137 | } 138 | } 139 | ] 140 | } -------------------------------------------------------------------------------- /OptiFineDoc/doc/biome_palettes_grid.txt: -------------------------------------------------------------------------------- 1 | ============================================================= 2 | Description of OptiFine's Custom Biome Palettes (Grid format) 3 | Based on McPatcher's Custom Biome Palettes 4 | ============================================================= 5 | 6 | Custom Biome Palettes (Grid format) 7 | =================================== 8 | 9 | The vanilla colormap format has a few drawbacks. 10 | First some biomes like desert are represented by only a single pixel in the colormap, which means their color cannot vary by height. 11 | Further, multiple biomes share their temperature and humidity values, making it impossible to give them different color schemes. 12 | Even when the base values are different, biomes sometimes overlap at higher altitudes. 13 | 14 | OptiFine offers an alternative, first proposed by Misa. Like the vanilla maps, it is -- generally, see Tips below -- a 256x256 colormap, 15 | but the x coordinate represents the biome ID number and the y coordinate the height. (See the Minecraft Wiki for a list of biome IDs.) 16 | This allows complete separation between biomes and gives you full control from bedrock to max build height. 17 | 18 | Layout 19 | ====== 20 | 21 | Each column in the colormap represents a single biome. Please note that the image is "flipped" vertically: 22 | The bottom of the world (y=0) is at the top of the image and the max build height (y=255) is at the bottom. 23 | Sea level is y=64. Generally, you will make each column some sort of gradient. 24 | 25 | Template (images/biome/grid/template.png) 26 | 27 | Properties file format (colormap.properties) 28 | 29 | (Optional) Format indicator 30 | =========================== 31 | 32 | This property simply distinguishes grid-formatted colormaps from vanilla ones. 33 | If not specified, your grid colormap will be interpreted in vanilla temperature+humidity format, leading to strange results. 34 | 35 | # Grid format 36 | format=grid 37 | 38 | The format property can be omitted if you set it globally in the "assets/minecraft/optifine/color.properties" file: 39 | 40 | # Grid format 41 | palette.format=grid 42 | 43 | This makes all your custom colormaps use the grid format, so be sure that this is what you want. 44 | 45 | (Optional) List of blocks with optional properties 46 | ================================================== 47 | 48 | # Blocks 49 | # For example: 50 | # blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west 51 | blocks= 52 | 53 | See Biome Palettes (biome_palettes.txt). 54 | 55 | (Optional) Colormap image 56 | ========================= 57 | 58 | # Image 59 | source= 60 | 61 | See Biome Palettes. 62 | 63 | (Optional) Default color 64 | ======================== 65 | 66 | # Color 67 | color= 68 | 69 | See Biome Palettes. 70 | 71 | (Optional) y variance 72 | ====================== 73 | 74 | If set, this property adds random noise to the y coordinate before sampling from the colormap, giving flat areas a more varied appearance. 75 | A value of 2 causes the game to pick a value between y - 2 and y + 2, for example. 76 | 77 | # Y variance 78 | yVariance= 79 | 80 | The default value is 0 (no variation). 81 | 82 | This property can also be set globally in "assets/minecraft/optifine/color.properties": 83 | 84 | # Y variance 85 | palette.yVariance= 86 | 87 | (Optional) y offset 88 | =================== 89 | 90 | # Y offset 91 | yOffset= 92 | 93 | This subtracts a fixed value from the block's y coordinate before sampling from the colormap. 94 | For example a value of 64 will use the pixel at 0 for blocks between layers 0 and 64. A block at 65 will use pixel 1, 66 pixel 2, etc. 95 | 96 | The default value is 0 (no offset). 97 | 98 | Tips 99 | ==== 100 | 101 | Forward compatibility: Unused columns in the map represent unassigned biome IDs that may be used by either by future Minecraft versions or by mods. 102 | Of course you can create color schemes for particular mod biomes if you know the IDs that they use. But even if you don't, 103 | it is best to at least pick a neutral-looking gradient for unused columns so that new biomes will have a reasonable default appearance. 104 | 105 | Backward compatibility: The vanilla "grass.png" and "foliage.png" maps in "assets/minecraft/textures/colormap" are always in the vanilla format, 106 | regardless of any properties file setting. This preserves compatibility for non-OptiFine users. 107 | To use the grid format with grass or leaves, you must create a custom colormap in "assets/minecraft/optifine/colormap/blocks" 108 | and apply it to the appropriate block(s). For OptiFine users, the custom colormap overrides the vanilla one; 109 | for non-OptiFine users, only the vanilla one will be used. 110 | 111 | Resolution: While colormaps in this format are generally 256x256, there is no strict requirement as with the vanilla format: 112 | 113 | Minecraft 1.7 introduced rare variants of many biomes. For example "Birch Forest M" (ID 155) is the rare version of "Birch Forest" (ID 27). 114 | Conveniently, the rare is always common + 128. This fact can be exploited if you want all rare biomes to use the same color schemes 115 | as the corresponding non-rare ones. Simply make your colormap 128 pixels wide instead of 256, and OptiFine will "wrap" it 116 | in the x direction when assigning columns to biomes. 117 | Similarly, a 1-pixel wide colormap gives you the same height-based color gradient across all biomes. 118 | In the y direction, if you provide more than 256 pixels, OptiFine will happily use them if the server's build height is higher than the default. 119 | Similarly, if the colormap is shorter than 256 pixels, it will simply "top out" at that height giving all blocks above that the same color. 120 | In particular, a height of 64 pixels allows for variation underground and a fixed color above sea level. 121 | A height of 192 pixels combined with a setting of yOffset=64 gives you just the opposite: variation above ground and a fixed color below. 122 | A height of 1 pixel allows for variation across biomes but not by height. 123 | 124 | References 125 | ========== 126 | https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes_(Grid) 127 | http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1255785-b?comment=124 -------------------------------------------------------------------------------- /OptiFineDoc/doc/sky.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Sky feature. 3 | # Based on the configuration for MCPatcher's Better Skies mod. 4 | # 5 | ############################################################################### 6 | # sky.properties 7 | ############################################################################### 8 | # 9 | # All property names are case-sensitive. 10 | # Properties that specify a path to a texture file can use any of the following 11 | # syntax: 12 | # Relative to assets/minecraft: 13 | # path/filename -> assets/minecraft/path/filename 14 | # Relative to assets/minecraft/optifine: 15 | # ~/path/filename -> assets/minecraft/optifine/filename 16 | # Relative to location of properties file: 17 | # ./path/filename -> (path of properties file)/path/filename 18 | # Absolute path with namespace: 19 | # namespace:path/filename -> assets/namespace/path/filename 20 | # 21 | # Place the file at 22 | # ~/sky/world0/sky0.properties 23 | # ~/sky/world0/sky1.properties 24 | # ... etc. 25 | # in your texture pack. Each file represents one layer of the sky. OptiFine 26 | # will continue loading them until a .properties file is not found. The order 27 | # is the order in which they will be rendered in game. 28 | # 29 | # Additionally, two special properties files are applied to the sun and moon if 30 | # present. This is mainly intended to allow you to override the blend method 31 | # used by the sun and moon. 32 | # ~/sky/world0/sun.properties (replaces sun.png) 33 | # ~/sky/world0/moon_phases.properties (replaces moon_phases.png) 34 | # Instead of a full skybox, the source texture should match the layout of 35 | # sun.png or moon_phases.png. 36 | # 37 | # NOTE: The "world0" in the path refers to the overworld, while "world1" refers to the End. 38 | # If there were other worlds with skies (the Nether does not use the standard sky rendering 39 | # methods), their files would be in ~/sky/world. 40 | ############################################################################### 41 | 42 | ############################################################################### 43 | # Sky properties 44 | ############################################################################### 45 | 46 | # (Optional) Name of source texture. This can be anywhere in your texture pack 47 | # and multiple properties files can share the same source. If not specified, 48 | # sky.png in the same directory is used. 49 | source= 50 | 51 | # (Optional) Fade in/out times. 52 | # All times are in hh:mm 24-hour format, for reference: 53 | # Sunrise = 6:00 = /time set 0 54 | # Noon = 12:00 = /time set 6000 55 | # Sunset = 18:00 = /time set 12000 56 | # Midnight = 0:00 = /time set 18000 57 | # The fade times control the brightness when blending. 58 | # between startFadeIn and endFadeIn: 0 up to 1 59 | # between endFadeIn and startFadeOut: always 1 60 | # between startFadeOut and endFadeOut: 1 down to 0 61 | # between endFadeOut and startFadeIn: always 0 62 | # Note that you do not need to specify startFadeOut; its value is uniquely 63 | # determined by the other three. 64 | # If no times are specified the layer is always rendered. 65 | startFadeIn= 66 | endFadeIn= 67 | endFadeOut= 68 | 69 | # (Optional) Blending method. Here "previous layer" can refer to the default 70 | # sky or to the previous custom sky defined by sky.properties. Supported 71 | # blending methods are 72 | # add: Add this sky bitmap to the previous layer. 73 | # subtract: 74 | # multiply: Multiply the previous RGBA values by the RGBA values in the 75 | # current bitmap. 76 | # dodge: 77 | # burn: 78 | # screen: 79 | # replace: Replace the previous layer entirely with the current bitmap. 80 | # There is no gradual fading with this method; if brightness 81 | # computed from the fade times is > 0, the full pixel value is 82 | # used. 83 | # overlay: RGB value > 0.5 brightens the image, < 0.5 darkens. 84 | # alpha: Weighted average by alpha value. 85 | # The default method is add. 86 | blend=add 87 | 88 | # (Optional) Rotation. Whether or not the bitmap should rotate with the time 89 | # of day. The default is true. The speed and direction of rotation can also 90 | # be controlled. 91 | rotate=true 92 | 93 | # (Optional) Rotation speed as a multiple of the default of one 360-degree 94 | # cycle per game day. A value of 0.5 rotates every two days. Irrational 95 | # values can be useful to make clouds appear in different positions each day, 96 | # for example. 97 | # NOTE: This does not affect the fading in and out which always occurs on a 98 | # 24-hour cycle. 99 | speed=1.0 100 | 101 | # (Optional) Axis of rotation. If a player is looking in the given direction, 102 | # the skybox will appear to be rotating clockwise around the line of sight. 103 | # Default rotation is along the southern axis (rising in the east and setting 104 | # in the west). 105 | # For reference, the vectors corresponding to the six cardinal directions are 106 | # below. However, the rotation axis can be any vector except 0 0 0. 107 | # Normalization is not required. 108 | # down = 0 -1 0 109 | # up = 0 1 0 110 | # north = 0 0 -1 111 | # south = 0 0 1 112 | # west = -1 0 0 113 | # east = 1 0 0 114 | axis=0.0 0.0 1.0 115 | 116 | # (Optional) Days 117 | # Days for which the layer is to be rendered 118 | # Days are numbered from 0 to daysLoop-1, for example: "days=0 2-4 6" 119 | days= 120 | 121 | # (Optional) Days loop 122 | # Number of days in the loop, default is 8 123 | daysLoop=8 124 | 125 | # (Optional) Weather 126 | # Weather for which the layer is to be rendered 127 | # Several values can be specified separated by space 128 | # for example "weather=clear rain thunder" 129 | # Default is "clear" 130 | weather=clear|rain|thunder 131 | 132 | # (Optional) Biome and height 133 | # Limit the sky layer to only certain biomes or height ranges. 134 | # The vanilla biome names are listed here: https://minecraft.wiki/w/Biome#Biome_IDs 135 | # Biomes added by mods can also be used. 136 | # Since 1.18 negative values may be specified for height. When used in a range they have to be put in brackets. 137 | biomes= 138 | heights= 139 | 140 | # (Optional) Transition 141 | # Transition time (sec) for the layer brightness. 142 | # It is used to smooth sharp transitions, for example between different biomes. 143 | # Default is 1 sec. 144 | transition=1 145 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/examples/README.md: -------------------------------------------------------------------------------- 1 | # Resource Pack Examples 2 | 3 | This folder contains a collection of resource packs that demonstrate OptiFine's resource pack features. 4 | 5 | ## Emissive Textures 6 | 7 | This resource pack showcases emissive textures, making certain blocks and items glow in the dark for enhanced visibility and aesthetics. 8 | 9 |
10 | Features 11 |
    12 |
  • Emissive diamond, emerald, and gold ore blocks
  • 13 |
  • Emissive slime block showing variable emissive brightness
  • 14 |
  • Zombie with glowing eyes
  • 15 |
  • Glowing diamond sword
  • 16 |
  • Glowing sentry emerald armor trim
  • 17 |
18 |
19 | 20 | ## Random Entity Textures 21 | 22 | This resource pack showcases OptiFine’s Random Entity Textures feature, allowing entities to have different textures based on various conditions such as custom names or weighted randomness. 23 | 24 |
25 | Features 26 |
    27 |
  • Cows use the default behaviour. With no properties file, they will show all the provided textures randomly
  • 28 |
  • Chickens receive unique textures based on their names. If no name is present, it will fall back to weighted randomness.
  • 29 |
  • Slimes have a unique texture in the jungle, bamboo jungle, and ocean biome. The texture also has a 10% chance to show up in a swamp biome.
  • 30 |
  • Endermen use NBT checks to change texture based on the block they are holding. When holding a grass block, they will change texture.
  • 31 |
32 | 33 | ### Chicken Name-Based Textures 34 | 35 | | Name Condition | Match Type | Behavior | 36 | |---------------------------------|------------------|-------------------------------------------------| 37 | | Cluckshroom | Case Sensitive | Must be an exact match | 38 | | Amber Chicken | Case Insensitive | Uses `ipattern` | 39 | | Bronzed | Case Insensitive | Uses `ipattern`, allows extra text before/after | 40 | | Gold Crested | Case Insensitive | Uses `iregex`, allows extra text before/after | 41 | | Midnight / Midnight Chicken / 5 | Case Insensitive | Multiple name options using `iregex` | 42 | | Skewbald / Skewbald Chicken / 6 | Case Insensitive | Multiple name options using `iregex` | 43 | | Stormy / Stormy Chicken / 7 | Case Insensitive | Multiple name options using `iregex` | 44 |
45 | 46 | ## CEM Animation Examples 47 | 48 | This resource pack features a collection of useful animations for custom entity models, covering everything from basic movements to advanced, complex animations. 49 | 50 |
51 | Animations 52 | 53 | | Model Name | Animation Description | In-Game Effect | 54 | |--------------------------|------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------| 55 | | **spider.jem** | Custom leg animations, not based on any existing legs. | Three sets of legs with different swinging animations. First are normal, second move faster, third move further. | 56 | | **villager.jem** | Custom head animation, not based on an existing head. | The head looks around normally, but uses custom animations. | 57 | | **allay.jem** | Limits values using min, max, or clamp. | Four swinging elements, one swings freely, two are limited in different directions, one is limited in both. | 58 | | **zombie.jem** | Stores a value and uses it across multiple animations (does not work for block entities). | One sine wave is defined in the model, but it is used across three different elements in different ways. | 59 | | **pig.jem** | Creates a counter independent of time or age. | The pig's head spins constantly. | 60 | | **panda.jem** | Uses custom counters to create smooth transitions with boolean values. | When the panda gets wet, its head takes smoothly rotates over a couple seconds to be upside down. | 61 | | **husk.jem** | Allows an entity to have randomized animation speeds, unique per instance. | Each husk's head wobbles side to side at different random speeds. | 62 | | **cow.jem** | Plays an animation when the player meets certain distance requirements. | One cube rotates when player is far away, one when medium distance, and one when close by. | 63 | | **piglin_brute.jem** | Make elements ignore entity rotation, instead always facing north. | The piglin model will be rotated to always face north. | 64 | | **creeper.jem** | Makes a 2D plane always face perpendicular to the camera view, keeping 90-degree angles to the screen regardless of viewing angle. | The plane always looks like a perfect square pointed straight at your screen. | 65 | | **skeleton.jem** | Makes a cube face directly at the player's in-world position. | The cube rotates to always look at your in world player model. | 66 | | **wither_skeleton.jem** | Cancels the default death animation so mobs do not fall over when they die. | The wither skeleton remains standing upon death. | 67 | | **piglin.jem** | Cancels the default death animation and applies a new one. | The piglin floats up into the air when it gets killed. | 68 | | **zombified_piglin.jem** | Snaps a model to the nearest in-game block. | The cube aligns precisely with the block grid, snapping to the next one instead of moving smoothly. | 69 | | **armor_stand.jem** | Plays an animation, waits a random amount of time, then repeats. | The cube does a full rotation, then waits a random amount of time before doing another full rotation. | 70 |
71 | 72 | ## Trident CIT 73 | 74 | This resource pack demonstrates how to create Custom Item Textures (CIT) for tridents using item definitions and OptiFine CEM. 75 | 76 |
77 | Features 78 |
    79 |
  • Uses item definitions to render tridents as items instead of entities
  • 80 |
  • Includes three custom trident designs: Red Trident, Quindent, and Mjolnir
  • 81 |
  • Supports both uppercase and lowercase custom names
  • 82 |
  • Thrown tridents use OptiFine CEM and random entities to change model and texture based on the item name
  • 83 |
  • Atlases allow textures from the entity folder to be used on item models (optional)
  • 84 |
  • Requires Minecraft 1.21.5+ and OptiFine CEM
  • 85 |
86 |
87 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/random_entities.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Random Entities feature. 3 | # Based on the configuration for MCPatcher's Random Mobs mod. 4 | ############################################################################### 5 | # This file is offered without any copyright restrictions. 6 | # Please copy and modify it to suit your needs. 7 | # 8 | # Random Entities is backwards compatible with Random Mobs. The textures and 9 | # configurations in "assets/minecraft/optifine/mob" are also supported. 10 | # 11 | # You can place this file in the "optifine/random" folder of your resource pack, 12 | # parallel to the vanilla texture in "textures": 13 | # 14 | # Primary (vanilla) texture: 15 | # assets/minecraft/textures/entity/creeper/creeper.png 16 | # Alts: 17 | # assets/minecraft/optifine/random/entity/creeper/creeper2.png 18 | # assets/minecraft/optifine/random/entity/creeper/creeper3.png 19 | # assets/minecraft/optifine/random/entity/creeper/creeper4.png 20 | # etc. 21 | # Properties (optional): 22 | # assets/minecraft/optifine/random/entity/creeper/creeper.properties 23 | # 24 | # Primary (vanilla) texture: 25 | # assets/minecraft/textures/painting/burning_skull.png 26 | # Alts: 27 | # assets/minecraft/optifine/random/painting/burning_skull2.png 28 | # assets/minecraft/optifine/random/painting/burning_skull3.png 29 | # assets/minecraft/optifine/random/painting/burning_skull4.png 30 | # etc. 31 | # Properties (optional): 32 | # assets/minecraft/optifine/random/painting/burning_skull.properties 33 | # 34 | # Textures ending with a digit use the separator "." 35 | # 36 | # Primary (vanilla) texture: 37 | # assets/minecraft/textures/entity/warden/warden_pulsating_spots_2.png 38 | # Alts: 39 | # assets/minecraft/optifine/random/entity/warden/warden_pulsating_spots_2.2.png 40 | # assets/minecraft/optifine/random/entity/warden/warden_pulsating_spots_2.3.png 41 | # assets/minecraft/optifine/random/entity/warden/warden_pulsating_spots_2.4.png 42 | # etc. 43 | # Properties (optional): 44 | # assets/minecraft/optifine/random/entity/warden/warden_pulsating_spots_2.properties 45 | # 46 | # This file consists of a sequence of rules, numbered from 1. 47 | # 48 | # Each rule specifies a range of entity textures to use and one or more conditions 49 | # under which to use them. 50 | # 51 | # The entity coordinates when it spawns (single player) or when it is first 52 | # seen by the client (multiplayer) are checked against each rule in sequence. 53 | # The first rule that matches wins. If no rule matches, the default texture 54 | # (e.g. creeper.png) is used. 55 | # 56 | # If no ".properties" file is present for an entity, then all available textures are 57 | # used for that type of entity. 58 | # 59 | # Entities with multiple textures will use the ".properties" file for the base 60 | # texture. In other words, you do not need to create 61 | # wolf.properties 62 | # wolf_tame.properties 63 | # wolf_angry.properties 64 | # Just wolf.properties will work for all three, provided you have the same 65 | # number of textures for each. Similarly for "_eyes" and "_overlay". 66 | # 67 | # All property names are case-sensitive. 68 | # All paths are relative to assets/minecraft unless otherwise stated. 69 | ############################################################################### 70 | 71 | ############################################################################### 72 | # Rule format. 73 | # is the rule index. This is a number that links the individual properties together to form a rule. 74 | # starts at 1. 75 | ############################################################################### 76 | 77 | # (Required) Range of entity textures to use. 78 | # The texture index "1" is the default texture from "assets/minecraft/texture". 79 | textures.= 80 | # Alternatively the Random Mobs property "skins." can be used. 81 | # skins.= 82 | 83 | # (Optional) List of weights to apply to the random choice 84 | # Weights do not have to total 100 or any other particular value. 85 | # The number of weights should match the number of textures 86 | weights.= 87 | 88 | # (Optional) List of biomes 89 | # The vanilla biome names are listed here: https://minecraft.wiki/w/Biome#Biome_IDs 90 | # Biomes added by mods can also be used. 91 | biomes.= 92 | 93 | # (Optional) Height ranges 94 | # Replaces legacy minHeight and maxHeight properties. 95 | # Since 1.18 negative values may be specified for height. When used in a range they have to be put in brackets. 96 | heights.= 97 | 98 | # (Optional) Entity name 99 | # Uses syntax similar to the Custom Item Textures NBT tags. 100 | # A value starting with "!" performs a negative match (not). 101 | # Examples: 102 | # - Match string: "name=Pinky" 103 | # - Match special formatting: "name=\u00a74\u00a7oPinky" 104 | # (for best compatibility, use the escape sequence '\u00a7' instead of '§') 105 | # - Wildcards using "?" and "*": "name=pattern:Pinky*" 106 | # - Wildcards, case insensitive: "name=ipattern:Pinky*" 107 | # - Java regular expressions: "name=regex:Pin(k)+y" 108 | # (see http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html) 109 | # - Java regular expressions, case insensitive: "name=iregex:Pin(k)+y" 110 | # Any backslashes in the match string must be doubled. 111 | # Literal backslashes within a regular expression or wildcard must be quadrupled. 112 | # Correct: 113 | # name=regex:\\d+ 114 | # name=regex:\\\\ 115 | # name=/\\/\\ 116 | # Wrong: 117 | # name=regex:\d+ 118 | # name=regex:\\ 119 | # name=/\/\ 120 | name.= 121 | 122 | # Professions (optional) 123 | # List of villager professions with optional levels 124 | # 125 | # Entry format 126 | # [:level1,level2,...] 127 | # 128 | # Professions: none, armorer, butcher, cartographer, cleric, farmer, fisherman, fletcher, 129 | # leatherworker, librarian, mason, nitwit, shepherd, toolsmith, weaponsmith 130 | # 131 | # Example: 132 | # # Professions farmer (all levels) or librarian (levels 1,3,4) 133 | # professions=farmer librarian:1,3-4 134 | # # Professions full 135 | # professions=minecraft:fisherman minecraft:shepherd minecraft:nitwit 136 | professions.= 137 | 138 | # Colors (optional) 139 | # List of wolf/cat collar colors or sheep/llama/shulker_box/bed colors 140 | # Colors: white orange magenta light_blue yellow lime pink gray light_gray cyan purple blue brown green red black 141 | # Example: 142 | # colors.2=pink magenta purple 143 | # The legacy property "collarColors" is also recognized 144 | colors.= 145 | 146 | # Baby (optional) 147 | # Only valid for mobs 148 | baby.= 149 | 150 | # Health (optional) 151 | # Range of health values, can also be given in percent. 152 | # Only valid for mobs. 153 | # Example: 154 | # health.1=10 155 | # health.2=5-8 10-12 156 | # health.3=0-50% 157 | health.= 158 | 159 | # Moon phase (Optional) 160 | # List of moon phases (0-7) 161 | # Example 162 | # moonPhase.1=3 163 | # moonPhase.2=0 1 2 164 | # moonPhase.1=0-2 4-7 165 | moonPhase.= 166 | 167 | # Day time (Optional) 168 | # List of day times in ticks (0-24000) 169 | # Example 170 | # dayTime.1=2000-10000 171 | # dayTime.2=0-1000 18000-24000 172 | dayTime.= 173 | 174 | # Weather (Optional) 175 | # Several values can be specified, separated by space 176 | # for example "weather=clear rain thunder" 177 | weather.= 178 | 179 | # Sizes (optional) 180 | # Only valid for mobs with multiple sizes (0-255 for slimes and magma cubes and 0-64 for phantoms) 181 | # Slimes and magma cubes naturaly spawn in three sizes: 0=small, 1=medium, 3=big. 182 | # Naturaly spawing phantoms only spawn in one size: 0. 183 | # Example 184 | # sizes.1=3 185 | # sizes.2=0 1 3 186 | # sizes.3=0-2 4-7 187 | sizes.= 188 | 189 | # NBT tags (optional) 190 | # See "cit_single.properties" for more details. 191 | # Works with NBT data that is client side. NBT data that is only server side will not work. 192 | nbt..= 193 | 194 | # Blocks (optional) 195 | # For entities, checks the block on which the entity is standing. 196 | # For block entities, checks the block of the block entity. 197 | # See "ctm.properties, matchBlocks" for more details. 198 | blocks. 199 | 200 | ############################################################################### 201 | # Examples: 202 | # creeper/creeper.properties: 203 | ############################################################################### 204 | # Use creeper10.png through creeper14.png for all underground creepers. 205 | # creeper13.png will be used 7.3% (3/(10+10+10+3+10)) of the time. 206 | textures.1=10-14 207 | weights.1=10 10 10 3 10 208 | heights.1=0-55 209 | 210 | # Use 5, 7, 9 in high, hilly areas. 211 | textures.2=5 7 9 212 | biomes.2=windswept_hills desert forest badlands jagged_peaks stony_peaks 213 | heights.2=80-255 214 | 215 | # Fallback rule if nothing else matches. Remember, if no rule matches, only 216 | # the base creeper/creeper.png will be used. 217 | textures.3=1-4 6 8 15-20 218 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/properties_files.txt: -------------------------------------------------------------------------------- 1 | ============================================================= 2 | Description of OptiFine's configuration properties files 3 | Based on McPatcher's configuration files 4 | ============================================================= 5 | 6 | Overview 7 | ======== 8 | 9 | Many OptiFine features use properties files to control how textures within your texture pack are used. 10 | Properties files are simple text files similar to the Windows ".ini" format. Each line is a property, specified as name=value. 11 | 12 | # Sample comment 13 | property1=value 14 | property2=some_other_value 15 | 16 | # Blank lines are allowed 17 | property3=yet_another_value 18 | 19 | All property names are case-sensitive "renderpass" is not the same as "renderPass". The order of properties within the file 20 | does not matter. Many properties have default values and can be omitted, and in some cases the entire properties file is optional. 21 | See the sections for each properties file for details. 22 | 23 | Certain types of objects are used within properties files by different OptiFine features. 24 | Rather than describe these common types separately in each feature section, they are summarized here instead. 25 | 26 | Textures 27 | ======== 28 | 29 | Often, OptiFine requires you to specify a path to an image file or some other resource within your texture pack. 30 | This is simply the path to the texture within the zip file. The folder structure within a texture pack can get deeply nested, 31 | so OptiFine has some shortcuts to make things easier. Whenever OptiFine calls for you to provide a texture file, 32 | any of these options can be used to specify the path. 33 | 34 | The most straightforward method is simply a path relative to assets/minecraft: 35 | 36 | # Full path 37 | texture=textures/entity/creeper/creeper.png 38 | 39 | This refers to "assets/minecraft/textures/entity/creeper/creeper.png" within the zip file or folder of your texture pack. 40 | Always use forward slashes "/" to separate folder names. Regardless of your OS, do not use backslashes "\" 41 | or the game will not properly recognize the path. 42 | 43 | An optional "namespace" prefix can be added. This example refers to exactly the same "creeper.png" file as above: 44 | 45 | # Full path with namespace 46 | texture=minecraft:textures/entity/creeper/creeper.png 47 | 48 | For textures used by other mods, the namespace will often be something other than "minecraft": 49 | 50 | # Full path with mod namespace 51 | texture=herobrine:textures/entity/him.png 52 | 53 | This refers to "assets/herobrine/textures/entity/him.png", not to "assets/minecraft/textures/entity/him.png". 54 | 55 | Many textures specific to OptiFine are in the "assets/minecraft/optifine" folder. 56 | Since it is used so frequently, it can be represented by the tilde "~" character. The following refer to the same file: 57 | 58 | # Relative to "assets/minecraft/optifine" 59 | texture=~/dial/clock0.png 60 | texture=minecraft:optifine/dial/clock0.png 61 | 62 | Textures can also be specified relative to the path of the properties file that refers to them. 63 | For example, within "~/dial/clock.properties" (remember "~" = "assets/minecraft/optifine") 64 | 65 | # Relative path: Bare filename with no slashes 66 | texture=clock0.png 67 | # Relative path: Using "./" to denote the current directory 68 | texture=./clock0.png 69 | # Absolute path: Using "~" 70 | texture=~/dial/clock0.png 71 | # Absolute path: Without namespace 72 | texture=optifine/dial/clock0.png 73 | # Absolute path: With namespace 74 | texture=minecraft:optifine/dial/clock0.png 75 | 76 | all refer to the same path, "assets/minecraft/optifine/dial/clock0.png". If the properties file were in another location, 77 | say ~/misc, then relative paths would be based on that folder instead, but absolute paths would still refer to the dial directory. 78 | 79 | In general, try to organize your textures with the properties files that go with them. 80 | Your paths will be shorter and easier to maintain when you move things around. 81 | 82 | Blocks 83 | ====== 84 | 85 | Since 1.7 Minecraft can reference blocks by ID. 86 | Since 1.13 the numeric blocks IDs are removed and only block names can be used. 87 | 88 | The block IDs continue to exist within the game internally, but can no longer be specified in the configuration files as they are unstable. 89 | For example the stone block used to be ID 1 but is now called "minecraft:stone". As with textures, the "minecraft:" prefix is optional, 90 | so just "stone" will also work. Mods will probably use a namespace other than "minecraft" so the prefix will be required there. 91 | 92 | See the Dinnerbone's list of Block and Item IDs with names: http://media.dinnerbone.com/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt 93 | 94 | In 1.13 many variant blocks were "flattened" to several simple blocks and the block metadata was removed. 95 | See https://minecraft.wiki/w/Java_Edition_1.13/Flattening 96 | 97 | The block name format is "name<:property1=value1,...:property2=value1,...>". 98 | Optional parts are in angle brackets "<>". Default namespace is "minecraft". 99 | 100 | # Short name 101 | blocks=oak_stairs 102 | 103 | # Full name 104 | blocks=minecraft:oak_stairs 105 | 106 | # Mod blocks require full names 107 | blocks=botania:crate 108 | 109 | # Properties 110 | blocks=minecraft:oak_stairs:facing=east,west:half=bottom 111 | 112 | The "minecraft:" prefix is optional, this can also be written as: 113 | 114 | # Properties 115 | blocks=oak_stairs:facing=east,west:half=bottom 116 | 117 | Items 118 | ===== 119 | 120 | Since 1.7 items can also be specified by name. 121 | See Dinnerbone's list of Block and Item IDs with names: http://dinnerbone.com/media/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt 122 | 123 | Since 1.13 items can only be specified by name. 124 | See: https://minecraft.wiki/w/Java_Edition_1.13/Flattening 125 | 126 | Again, the "minecraft:" prefix is optional. 127 | 128 | Biomes 129 | ====== 130 | 131 | For features that call for a list of biomes, use the names from the Minecraft wiki: https://minecraft.wiki/w/Biome#Biome_IDs 132 | Biomes added by mods can also be used. 133 | 134 | # Biomes short 135 | biomes=ocean deep_ocean river beach 136 | # Biomes full 137 | biomes=minecraft:ocean biomesoplenty:highland 138 | 139 | Since 1.13 many biomes have been renamed. 140 | See: https://minecraft.wiki/w/Java_Edition_1.13/Flattening 141 | 142 | Blending methods 143 | ================ 144 | 145 | When two or more textures are combined, OptiFine offers several options for specifying the blending operation. 146 | 147 | Valid blending methods are described below. "This" or "current" texture refers to the texture currently being applied. "Previous" refers to whatever has been rendered so far, which could be a single texture or the result of an earlier blending operation. 148 | - replace: Replace the previous layer entirely with the current bitmap. No blending and only simple on/off transparency. 149 | - alpha: Blend the two textures using this texture's alpha value. This is the most common type of blending. 150 | - overlay: RGB value > 0.5 brightens the previous image, < 0.5 darkens. color is a synonym for this method. 151 | - add: Add this texture's RGB values multiplied by alpha to the previous layer. 152 | - subtract: Subtract this texture's RGB values from the previous layer. 153 | - multiply: Multiply the previous RGB values by this texture's RGB values 154 | - dodge: Add this texture's RGB values to the previous layer. 155 | - burn: New RGB = (1 - current RGB) * previous RGB 156 | - screen: New RGB = 1 - (1 - current RGB) * (1 - previous RGB) 157 | 158 | See Blend modes on Wikipedia for some illustrations: https://en.wikipedia.org/wiki/Blend_modes 159 | 160 | Number lists 161 | ============ 162 | 163 | Occasionally you will need to specify a list of numbers. OptiFine understands ranges and individual values: 164 | 165 | # Single entry. 166 | list=1 167 | # Multiple values listed separately. 168 | list=1 2 3 169 | # Same values using ranges. 170 | list=1-3 171 | # Multiple ranges. 172 | list=1-3 6 8 10-15 173 | 174 | Since 1.18 negative values may be specified for height. When used in a range they have to be put in brackets. 175 | 176 | # Single entry. 177 | list=-1 178 | # Multiple values listed separately. 179 | list=-3 -2 -1 180 | # Same values using ranges. 181 | list=(-3)-(-1) 182 | # Multiple ranges. 183 | list=(-3)-(-1) 6 8 (-10)-15 184 | 185 | RGB colors 186 | ========== 187 | 188 | Color values are specified in hexadecimal RGB format: 189 | 190 | # White 191 | color=ffffff 192 | # Black 193 | color=000000 194 | # Red 195 | color=ff0000 196 | # Green 197 | color=00ff00 198 | # Blue 199 | color=0000ff 200 | 201 | References 202 | ========== 203 | https://bitbucket.org/prupe/mcpatcher/wiki/About_Properties_Files 204 | http://dinnerbone.com/media/uploads/2013-09/files/28_00-44-23_YfmAkomVI.txt 205 | http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/1226351-1?comment=11315 206 | http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/1226351-1?comment=11128 207 | https://minecraft.wiki/w/Java_Edition_1.13/Flattening -------------------------------------------------------------------------------- /OptiFineDoc/doc/biome_palettes.txt: -------------------------------------------------------------------------------- 1 | =============================================== 2 | Description of OptiFine's Custom Biome Palettes 3 | Based on McPatcher's Custom Biome Palettes 4 | =============================================== 5 | 6 | Custom Biome Palettes 7 | ===================== 8 | 9 | In vanilla Minecraft, the grass and leaf textures vary in color depending on the climate of the surrounding biome. 10 | This is controlled by two files, 11 | 12 | assets/minecraft/textures/colormap/grass.png 13 | assets/minecraft/textures/colormap/foliage.png 14 | 15 | Each file is a 256x256 colormap applied to the base grass or leaf texture (which is usually grey). 16 | 17 | OptiFine greatly expands this functionality to other blocks and to ambient sky and fog colors. 18 | Artists can use this to great effect to give each biome its own feel. 19 | 20 | This page is divided into two sections. The first describes the colormap formats themselves, 21 | and the second shows how to apply them to various elements of the game world. 22 | 23 | Vanilla colormap format 24 | ======================= 25 | 26 | The format used by vanilla Minecraft is a 256x256 colormap with the axes representing temperature and humidity. 27 | Each biome has fixed base temperature and humidity values corresponding to a single pixel in the colormap. 28 | As the y coordinate increases, the position in the colormap slowly moves toward the lower right. 29 | A forum post by khanador illustrates how this works: 30 | http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1256322-new-biome?comment=124 31 | 32 | The vanilla format is used for all custom colormaps as well, unless you override this behavior. 33 | 34 | OptiFine "grid" format 35 | ======================= 36 | 37 | An alternative format that offers finer control over each biome. It is detailed on its own page: 38 | https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes_(Grid) 39 | 40 | Other formats 41 | ============= 42 | 43 | Additionally, OptiFine offers a simple "fixed" colormap format. This format does not require an image; 44 | it is simply a single color applied to all blocks regardless of location. 45 | Its primary purpose is to override certain hardcoded block colors like reeds (sugar cane). 46 | 47 | Properties file format (colormap.properties) 48 | 49 | A custom colormap can consist of either a ".png" file, a properties file, or both depending on what you're trying to do. 50 | All of the properties are optional and in fact the entire properties file can be omitted if you do not need to change any of them. 51 | 52 | (Optional) Colormap format 53 | ========================== 54 | 55 | # Colormap format 56 | format= 57 | 58 | If omitted, the default format is vanilla. If you'd rather use grid format by default, 59 | you can set it globally in the "assets/minecraft/optifine/color.properties" file: 60 | 61 | # Grid format 62 | palette.format=grid 63 | 64 | Note that this setting does not affect the vanilla "grass.png" and "foliage.png" files in "assets/minecraft/textures/colormap". 65 | Those are always interpreted in the vanilla format in order to preserve compatibility for non-OptiFine users. 66 | See "Grass and foliage" below for how to use the grid format with these textures. 67 | 68 | (Optional) List of blocks with optional properties 69 | ================================================== 70 | 71 | # List of blocks with optional properties 72 | blocks= 73 | 74 | For colormaps applied to terrain (as opposed to fog, sky, and underwater), this is a list of blocks 75 | and optional property values to apply the map to. If this property is not specified, the block name is taken from the filename 76 | (e.g., "cobblestone.properties" -> "blocks=minecraft:cobblestone"). 77 | 78 | See About Properties Files (properties_files.txt) for the syntax. 79 | 80 | # For example: 81 | blocks=stone minecraft:sand minecraft:lever:face=wall:facing=east,west 82 | 83 | (Optional) Colormap image 84 | ========================= 85 | 86 | # Colormap image 87 | source= 88 | 89 | For vanilla and grid colormaps only. The path to the image containing the colormap. 90 | If this property is omitted, it defaults to a png with the same name and directory as the properties file itself, 91 | e.g., "stone.properties" -> "source=stone.png". 92 | 93 | (Optional) Default color 94 | ======================== 95 | 96 | # Default color 97 | color= 98 | 99 | For "format=fixed", this is simply the fixed color to be applied to all matching blocks. 100 | If no value is given, the default is white "ffffff". 101 | 102 | For "format=vanilla" or "format=grid", this color is used for held or dropped blocks. 103 | If no value is given, the default color is instead taken from a fixed location depending on the format: 104 | 105 | # Format 106 | format=vanilla: x=127,y=127 (Center of bitmap) 107 | format=grid: x=1,y=64 (Plains biome at sea level) 108 | 109 | Applying a custom colormap 110 | ========================== 111 | 112 | Custom colormaps can be applied to any block or set of blocks. 113 | They can also be applied to ambient fog, sky, and underwater colors. 114 | 115 | Block-based colormaps can be applied in one of two ways: 116 | - as a list in "assets/minecraft/optifine/color.properties" 117 | - as separate files under "assets/minecraft/optifine/colormap/blocks". 118 | 119 | For the first method, use the syntax 120 | 121 | # Custom colormap 122 | palette.block.= 123 | 124 | For example, this assigns the four basic types of leaves their own colormaps: 125 | 126 | # Custom colormap 127 | palette.block.~/colormap/oak.png=oak_leaves 128 | palette.block.~/colormap/tall_grass_up.png=tall_grass:half=upper 129 | palette.block.~/colormap/tall_grass_low.png=tall_grass:half=lower 130 | 131 | Two limitations of this method: 132 | - the source and blocks properties can be set; the rest are defaults. 133 | - if the player is using multiple resource packs, only the first color.properties file will be read by the game. 134 | 135 | An alternative way is by using separate files under "assets/minecraft/optifine/colormap/blocks". 136 | Subfolders are allowed and are useful to make organization easier. The above example could also be done this way: 137 | 138 | In "assets/minecraft/optifine/colormap/blocks/oak.properties": 139 | 140 | # Oak colormap 141 | blocks=oak_leaves 142 | 143 | In "assets/minecraft/optifine/colormap/blocks/tall_grass_up.properties": 144 | 145 | # Pine colormap 146 | blocks=tall_grass:half=upper 147 | 148 | In "assets/minecraft/optifine/colormap/blocks/tall_grass_low.properties": 149 | 150 | # Pine colormap 151 | blocks=tall_grass:half=lower 152 | 153 | This is assuming you have "oak.png", "tall_grass_up.png" and "tall_grass_low.png" in the same folder. 154 | 155 | Single block 156 | ============ 157 | 158 | The simplest case, a custom colormap applied to a single block type with no property values, it does not need a properties file. 159 | For example, "assets/minecraft/optifine/colormap/blocks/sand.png" applies to sand blocks without the need to specify "blocks=sand". 160 | 161 | Multiple blocks 162 | =============== 163 | 164 | To apply the same colormap to all stone and ore blocks, use a properties file 165 | 166 | In "assets/minecraft/optifine/colormap/blocks/stone_and_ore.properties": 167 | 168 | # Stone and ore colormaps 169 | blocks=stone gold_ore iron_ore coal_ore lapis_ore diamond_ore redstone_ore redstone_ore:lit=true emerald_ore 170 | 171 | Add "format=grid" if using the new format. The source property is unnecessary if the colormap is also named "stone_and_ore.png". 172 | 173 | In "color.properties" this can also be written as: 174 | 175 | # Stone and ore colormaps 176 | palette.block.~/colormap/custom/stone.png=stone gold_ore iron_ore coal_ore lapis_ore diamond_ore redstone_ore redstone_ore:lit=true emerald_ore 177 | 178 | Add "palette.format=grid" to use grid format for all your custom colormaps (except the vanilla "grass.png" and "foliage.png"). 179 | 180 | Grass and foliage 181 | ================= 182 | 183 | Custom colormaps will override the vanilla grass.png and foliage.png. 184 | This means you can leave your vanilla maps in place for compatibility and create custom ones for OptiFine users: 185 | 186 | In "assets/minecraft/optifine/colormap/blocks/grass.properties": 187 | 188 | # Grass colormap 189 | format=grid 190 | # NOTE: "blocks=grass" not needed since it is in the filename 191 | yVariance=2 192 | 193 | In "assets/minecraft/optifine/colormap/blocks/oak.properties": 194 | 195 | # Oak colormap 196 | format=grid 197 | blocks=oak_leaves 198 | 199 | Fixing reeds (sugar cane) in 1.7 200 | 201 | Starting in 1.7, Minecraft applies the "grass.png" color to reeds, much to the annoyance of many artists. 202 | A "fixed" colormap of "ffffff" (white) effectively reverts to the 1.6 behavior. 203 | A 256x256 all-white colormap would of course accomplish the same thing, but this method is more efficient. 204 | The simplest way to do this is to create a properties file containing just one line: 205 | 206 | In "assets/minecraft/optifine/colormap/blocks/reeds.properties": 207 | 208 | # Reeds colormap 209 | format=fixed 210 | 211 | This works because the blocks property defaults to the filename (reeds) and the color property defaults to "ffffff" for fixed colormaps. 212 | 213 | Ambient fog, sky, and underwater colors 214 | ======================================= 215 | 216 | These specifically named colormaps override the default fixed ambient colors: 217 | 218 | Overworld fog: "assets/minecraft/optifine/colormap/fog0.png" 219 | Overworld sky: "assets/minecraft/optifine/colormap/sky0.png" 220 | Underwater: "assets/minecraft/optifine/colormap/underwater.png" 221 | 222 | Each one can have a corresponding properties file to specify the format or other settings. 223 | These colormaps behave just as terrain-based ones except that they do not care about the blocks property. 224 | 225 | References 226 | ========== 227 | https://bitbucket.org/prupe/mcpatcher/wiki/Biome_Palettes 228 | http://www.minecraftforum.net/forums/mapping-and-modding/resource-packs/resource-pack-discussion/1256322-new-biome?comment=124 -------------------------------------------------------------------------------- /OptiFineDoc/doc/cem_animation.txt: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Custom Entity Model Animations 3 | # Reference configuration for OptiFine's feature Custom Entity Models 4 | ###################################################################### 5 | # Each model variable which is to be animated is assigned an expression. 6 | # The expression is evaluated every time the model is rendered and its value is assigned to the variable. 7 | # The variables and expressions are defined in the "animation" section of the json entity model (JEM). 8 | # 9 | # "animations": 10 | # [ 11 | # { 12 | # "variable1": "expression1", 13 | # "variable2": "expression2, 14 | # ... 15 | # } 16 | # ] 17 | # 18 | # 19 | # Variables 20 | # 21 | # Model variables are specified in the format 22 | # "." 23 | # 24 | # The model can be: 25 | # "this" - current custom model 26 | # "part" - the original part model to which the custom model is attached 27 | # "" - original model by part name 28 | # "" - custom model by ID 29 | # ":::..." - (hierarchical) start with original model by part name, then find children by ID 30 | # ":::..." - (hierarchical) start with model by ID, then find children by ID 31 | # 32 | # The first model found by part name or ID is used if there are duplicates. 33 | # The model search by ID is deep, also when used in a hierarchical specification. 34 | # 35 | # The hierarchical specification allows model groups (json part models) to be reused for different parts. 36 | # For example one hand model ("shoulder:upper_arm:elbow:forearm:palm:finger[1.5]" can be used for both left and right hand. 37 | # The animation can use "left_hand:finger1" for the left thumb and "right_hand:finger1" for the right thumb. 38 | # The intermediate parents in the hierarchical specification can be skipped. 39 | # 40 | # Variable names 41 | # tx, ty, tz - Translation x, y, z 42 | # rx, ry, rz - Rotation x, y, z 43 | # sx, sy, sz - Scale x, y, z 44 | # visible - Show model and submodels (boolean) 45 | # visible_boxes - Show model only, does not affect submodels (boolean) 46 | # 47 | # Entity variables 48 | # 49 | # Entity variables are specified in the format "var." (float) or "varb." (boolean) 50 | # The name can be any string, for example "var.xyz", "var.last_rx", etc. 51 | # The variable is attached to the rendered entity and has a default value 0 or false. 52 | # Entity variables are useful for storing animation data between frames. 53 | # Not supported for block entities. 54 | # 55 | # Render variables 56 | # render.shadow_size - The size of the shadow underneath an entity 57 | # render.shadow_opacity - How transparent the shadow is 58 | # render.shadow_offset_x, render.shadow_offset_z - The location of the shadow 59 | # render.leash_offset_x, render.leash_offset_y, render.leash_offset_z - The position of the point the leash attaches to 60 | # 61 | # Expressions 62 | # 63 | # Expressions are general mathematical expressions with brackets, constants, variables, operators and functions. 64 | # 65 | # Constants 66 | # - Floating point number 67 | # pi - 3.1415926 68 | # true 69 | # false 70 | # 71 | # Variables 72 | # . - Model variable, see the model variable specification 73 | # time - The total game time in ticks, not related to the daylight cycle (0-27720) 74 | # day_time - The current day time in ticks (0-24000) 75 | # day_count - The current day count 76 | # 77 | # Render parameters 78 | # limb_swing - Limb animation counter. Counts up in ticks when the entity moves 79 | # limb_speed - Limb movement speed. Ranges from 0 to 1 (still = 0, sprinting = 1) 80 | # age - Age in ticks 81 | # head_pitch - Head pitch (x Rotation) 82 | # head_yaw - Head yaw (y rotation) 83 | # player_pos_x, player_pos_y, player_pos_z - The players current world position 84 | # player_rot_x, player_rot_y - The entities current world rotation. North is 0 85 | # frame_time - The time in seconds since the last frame 86 | # frame_counter - The index of the current frame (0 to 27719, then resets to 0) 87 | # dimension - The current dimension. Overworld: 0, Nether: -1, End: 1 88 | # rule_index - The index of the current matching random models rule. Defaults to 0 89 | # 90 | # Entity parameters (float) 91 | # health - The entity's current health 92 | # hurt_time - The time the entity is hurt for. Counts down from 10 to 0 93 | # death_time - The time the entity is dead. Counts up from 0 to 20 94 | # anger_time - The remaining entity angry time in ticks. Starts with 400-780 while agressive, and then counts down to 0 when the target is lost 95 | # anger_time_start - The start value of anger_time 96 | # max_health - The entity's maximum health 97 | # pos_x, pos_y, pos_z - The entities current world position 98 | # rot_x, rot_y - The entities current world rotation. North is 0 99 | # swing_progress - How far through an attack the entity is. Counts up from 0 to 1 100 | # id - A unique numeric identifier for the entity 101 | # 102 | # Entity parameters (boolean) 103 | # is_aggressive - If the entity is aggressive towards a player or another entity 104 | # is_alive - If the entity is alive 105 | # is_burning - If the entity is on fire 106 | # is_child - If the entity is in its baby state 107 | # is_glowing - If the entity has the Glowing effect 108 | # is_hurt - If the entity is taking damage 109 | # is_in_hand - If the entity is being held in your hand 110 | # is_in_item_frame - If the entity is in an item frame 111 | # is_in_ground - If a trident is impaled in the ground 112 | # is_in_gui - If the entity is inside the GUI 113 | # is_in_lava - If the entity is touching lava 114 | # is_in_water - If the entity is touching water 115 | # is_invisible - If the entity has the Invisibility effect/NBT tag 116 | # is_on_ground - If the entity is touching the ground 117 | # is_on_head - If the entity is worn on another entity's head 118 | # is_on_shoulder - If a parrot is sitting on your shoulder 119 | # is_ridden - If the entity is being ridden by another entity 120 | # is_riding - If the entity is riding another entity 121 | # is_sitting - If a cat/wolf/parrot is sitting 122 | # is_sneaking - If a cat/ocelot is sneaking 123 | # is_sprinting - If a cat/ocelot is sprinting 124 | # is_tamed - If a cat/wolf/parrot is tamed 125 | # is_wet - If the entity is inside water/rain 126 | # 127 | # Operators 128 | # +, -, *, /, % 129 | # !, &&, || 130 | # >, >=, <, <=, ==, != 131 | # 132 | # Functions 133 | # sin(x) - Get the sine of x 134 | # cos(x) - Get the cosine of c 135 | # asin(x) - Get the arc sine of x 136 | # acos(x) - Get the arc cosine of x 137 | # tan(x) - Get the tangent of x 138 | # atan(x) - Get the arc tangent of x 139 | # atan2(y, x) - Get the angle between the positive x-axis and the point (x, y) 140 | # torad(deg) - Convert degrees to radians 141 | # todeg(rad) - Convert radians to degrees 142 | # min(x, y ,...) - Get the smallest number from a list of numbers 143 | # max(x, y, ...) - Get the largest number from a list of numbers 144 | # clamp(x, min, max) - Limits a number to be between min and max values 145 | # abs(x) - Get the absolute value of a number. Will turn negative numbers positive 146 | # floor(x) - Round x down to the nearest whole number 147 | # ceil(x) - Round x up to the nearest whole number 148 | # exp(x) - Get e (Euler's constant) raised to the power of x 149 | # frac(x) - Get the fractional part of x (what's behind the decimal point) 150 | # log(x) - Get the natural logarithm of x 151 | # pow(x, y) - Get x raised to the power of y 152 | # random(seed) - Random number from 0 to 1. Providing a seed will always return the same result. The seed is optional 153 | # round(x) - Round x to nearest whole number 154 | # signum(x) - Get the sign of x (positive or negative) 155 | # sqrt(x) - Get the square root of x 156 | # fmod(x, y) - Similar to the % operator, but the returned value always has the same sign as the divisor 157 | # lerp(k, x, y) - Linear interpolation between X and Y 158 | # if(cond, val, [cond2, val2, ...], val_else) - Select a value based one or more conditions 159 | # ifb(cond, val, [cond2, val2, ...], val_else)- Select a boolean value based one or more conditions 160 | # print(id, n, x) - Prints the value "x" every N-th frame 161 | # printb(id, n, x) - Prints the boolean value "x" every N-th frame 162 | # 163 | # Boolean functions 164 | # between(x, min, max) - Check if a value is between min and max values 165 | # equals(x, y, epsilon) - Compare two float values with error margin 166 | # in(x, val1, val2, ...) - Check if a value equals one of several values 167 | # 168 | # Examples: 169 | # ... 170 | # "animations": 171 | # [ 172 | # { 173 | # "this.rx": "clamp(-0.5 * part.rx, 0, 90)", 174 | # "this.tx": "3 * sin(limb_swing / 4) - 2", 175 | # "this:Hoof.rx": "if(leg4:Hoof.rx > 90, leg4:Hoof.rx - 90, 0)" 176 | # ... 177 | # } 178 | # ] 179 | # 180 | # Walking animation: 181 | # x is a multipler to control how fast the leg swings back and forth, and y is a multiplier to control how far it swings back and forth 182 | # 183 | # "left_leg.rx": "sin(limb_swing*x)*limb_speed*y" 184 | # 185 | # Attack animation: 186 | # x is a multipler for how much it rotates 187 | # 188 | # "head.rx": "sin(swing_progress*pi)*x" 189 | # 190 | # Hurt animation: 191 | # x is a multipler for how much it rotates 192 | # 193 | # "head.rx": "-sin(hurt_time/pi)*x" 194 | # 195 | # Custom counter: 196 | # This is a counter that will count up while an entity is in water, and count down again when it leaves 197 | # 198 | # "var.counter": "if(is_in_water, min(20, var.counter + 0.1 * frame_time * 20), max(0, var.counter - 0.1 * frame_time * 20))" 199 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/color.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Custom Colors feature. 3 | # Based on the configuration for MCPatcher's Custom Colors mod. 4 | # 5 | ############################################################################### 6 | # color.properties 7 | ############################################################################### 8 | # 9 | # You only need to provide values for the properties you wish to change. The 10 | # default Minecraft values for each property are given below for convenience. 11 | # 12 | # All property names are case-sensitive. 13 | # All colors are in hex rgb format, 000000 to ffffff. 14 | # All paths are relative to assets/minecraft unless otherwise stated. 15 | ############################################################################### 16 | 17 | ############################################################################### 18 | # Base color of particle effects 19 | ############################################################################### 20 | # Base water particle (splashes, bubbles, drops) color. Biome water color 21 | # multiplier is applied to this value. The value should match the color of 22 | # your base water texture. If your base water texture is grey so that you do 23 | # coloring via misc/watercolorX.png, you should set this to ffffff. 24 | particle.water=334cff 25 | # Base portal particle color. A random multiplier between 0.4 and 1.0 is 26 | # applied to all three r/g/b values. 27 | particle.portal=ff4ce5 28 | 29 | ############################################################################### 30 | # Nether and End colors 31 | ############################################################################### 32 | fog.nether=330707 33 | fog.end=181318 34 | sky.end=282828 35 | 36 | ############################################################################### 37 | # Lily pad color 38 | ############################################################################### 39 | # This is a single color that is used across all biomes. 40 | lilypad=208030 41 | 42 | ############################################################################### 43 | # Colors for each potion effect 44 | ############################################################################### 45 | # Final color is the average of these colors weighted by level of each potion 46 | # effect. 47 | potion.absorption=2552a5 48 | potion.bad_omen=0b6138 49 | potion.blindness=1f1f23 50 | potion.conduit_power=1dc2d1 51 | potion.darkness=292721 52 | potion.dolphins_grace=88a3be 53 | potion.fire_resistance=ff9900 54 | potion.glowing=94a061 55 | potion.haste=d9c043 56 | potion.health_boost=f87d23 57 | potion.hero_of_the_village=44ff44 58 | potion.hunger=587653 59 | potion.infested=8c9b8c 60 | potion.instant_damage=a9656a 61 | potion.instant_health=f82423 62 | potion.invisibility=f6f6f6 63 | potion.jump_boost=fdff84 64 | potion.levitation=ceffff 65 | potion.luck=59c106 66 | potion.mining_fatigue=4a4217 67 | potion.nausea=551d4a 68 | potion.night_vision=c2ff66 69 | potion.oozing=99ffa3 70 | potion.poison=87a363 71 | potion.raid_omen=de4058 72 | potion.regeneration=cd5cab 73 | potion.resistance=9146f0 74 | potion.saturation=f82423 75 | potion.slowness=8bafe0 76 | potion.slow_falling=f3cfb9 77 | potion.speed=33ebff 78 | potion.strength=ffc700 79 | potion.trial_omen=16a6a6 80 | potion.unluck=c0a44d 81 | potion.water_breathing=98dac0 82 | potion.weakness=484d48 83 | potion.weaving=78695a 84 | potion.wind_charged=bdc9ff 85 | potion.wither=736156 86 | # potion.water represents a plain bottle of water 87 | potion.water=385dc6 88 | 89 | ############################################################################### 90 | # Spawner egg colors 91 | # egg..= 92 | # The entity name can be given in short or in full form. 93 | # The separator ":" in the full form has to be escaped. 94 | # For example: 95 | # egg.shell.creeper=0da70b 96 | # egg.spots.minecraft\:creeper=000000 97 | ############################################################################### 98 | egg.shell.= 99 | egg.spots.= 100 | 101 | ############################################################################### 102 | # Map colors 103 | # Aliases 104 | # map.snow=map.white 105 | # map.adobe=map.orange 106 | # map.silver=map.light_gray 107 | # map.lightBlue=map.light_blue 108 | ############################################################################### 109 | # Block map colors 110 | map.air=000000 111 | map.grass=7fb238 112 | map.sand=f7e9a3 113 | map.cloth=c7c7c7 114 | map.tnt=ff0000 115 | map.ice=a0a0ff 116 | map.iron=a7a7a7 117 | map.foliage=007c00 118 | map.clay=a4a8b8 119 | map.dirt=976d4d 120 | map.stone=707070 121 | map.water=4040ff 122 | map.wood=8f7748 123 | map.quartz=fffcf5 124 | map.gold=faee4d 125 | map.diamond=5cdbd5 126 | map.lapis=4a80ff 127 | map.emerald=00d93a 128 | map.podzol=815631 129 | map.netherrack=700200 130 | # General map colors 131 | map.white=ffffff 132 | map.orange=d87f33 133 | map.magenta=b24cd8 134 | map.light_blue=6699d8 135 | map.yellow=e5e533 136 | map.lime=7fcc19 137 | map.pink=f27fa5 138 | map.gray=4c4c4c 139 | map.light_gray=999999 140 | map.cyan=4c7f99 141 | map.purple=7f3fb2 142 | map.blue=334cb2 143 | map.brown=664c33 144 | map.green=667f33 145 | map.red=993333 146 | map.black=191919 147 | # Terracotta 148 | map.white_terracotta=d1b1a1 149 | map.orange_terracotta=9f5224 150 | map.magenta_terracotta=95576c 151 | map.light_blue_terracotta=706c8a 152 | map.yellow_terracotta=ba8524 153 | map.lime_terracotta=677535 154 | map.pink_terracotta=a04d4e 155 | map.gray_terracotta=392923 156 | map.light_gray_terracotta=876b62 157 | map.cyan_terracotta=575c5c 158 | map.purple_terracotta=7a4958 159 | map.blue_terracotta=4c3e5c 160 | map.brown_terracotta=4c3223 161 | map.green_terracotta=4c522a 162 | map.red_terracotta=8e3c2e 163 | map.black_terracotta=251610 164 | # Nether 165 | map.crimson_nylium=bd3031 166 | map.crimson_stem=943f61 167 | map.crimson_hyphae=5c191d 168 | map.warped_nylium=167e86 169 | map.warped_stem=3a8e8c 170 | map.warped_hyphae=562c3e 171 | map.warped_wart_block=14b485 172 | map.deepslate=646464 173 | map.raw_iron=d8af93 174 | map.glow_lichen=7fa796 175 | 176 | ############################################################################### 177 | # Sheep colors 178 | # Aliases 179 | # sheep.silver=sheep.light_gray 180 | # sheep.lightBlue=sheep.light_blue 181 | ############################################################################### 182 | sheep.white=e6e6e6 183 | sheep.orange=ba6015 184 | sheep.magenta=953a8d 185 | sheep.light_blue=2b86a3 186 | sheep.yellow=bea22d 187 | sheep.lime=609517 188 | sheep.pink=b6687f 189 | sheep.gray=353b3d 190 | sheep.light_gray=757571 191 | sheep.cyan=107575 192 | sheep.purple=66258a 193 | sheep.blue=2d337f 194 | sheep.brown=623f25 195 | sheep.green=465d10 196 | sheep.red=84221c 197 | sheep.black=151518 198 | 199 | ############################################################################### 200 | # Wolf and cat collar colors 201 | # Aliases 202 | # collar.silver=collar.light_gray 203 | # collar.lightBlue=collar.light_blue 204 | ############################################################################### 205 | collar.white=f9fffe 206 | collar.orange=f9801d 207 | collar.magenta=c74ebd 208 | collar.light_blue=3ab3da 209 | collar.yellow=fed83d 210 | collar.lime=80c71f 211 | collar.pink=f38baa 212 | collar.gray=474f52 213 | collar.light_gray=9d9d97 214 | collar.cyan=169c9c 215 | collar.purple=8932b8 216 | collar.blue=3c44aa 217 | collar.brown=835432 218 | collar.green=5e7c16 219 | collar.red=b02e26 220 | collar.black=1d1d21 221 | 222 | ############################################################################### 223 | # General dye colors 224 | # Base color for banners, beacon beam, tropical fish, wolf and cat collars 225 | # Aliases 226 | # dye.silver=dye.light_gray 227 | # dye.lightBlue=dye.light_blue 228 | ############################################################################### 229 | dye.white=f9fffe 230 | dye.orange=f9801d 231 | dye.magenta=c74ebd 232 | dye.light_blue=3ab3da 233 | dye.yellow=fed83d 234 | dye.lime=80c71f 235 | dye.pink=f38baa 236 | dye.gray=474f52 237 | dye.light_gray=9d9d97 238 | dye.cyan=169c9c 239 | dye.purple=8932b8 240 | dye.blue=3c44aa 241 | dye.brown=835432 242 | dye.green=5e7c16 243 | dye.red=b02e26 244 | dye.black=1d1d21 245 | 246 | ############################################################################### 247 | # Text colors 248 | ############################################################################### 249 | # color of exp level text 250 | text.xpbar=80ff20 251 | # color of "Boss Health" text 252 | text.boss=ff00ff 253 | # color of sign text 254 | text.sign=000000 255 | # color codes generated by \247 + 0123456789abcdef 256 | text.code.0=000000 257 | text.code.1=0000aa 258 | text.code.2=00aa00 259 | text.code.3=00aaaa 260 | text.code.4=aa0000 261 | text.code.5=aa00aa 262 | text.code.6=ffaa00 263 | text.code.7=aaaaaa 264 | text.code.8=555555 265 | text.code.9=5555ff 266 | text.code.10=55ff55 267 | text.code.11=55ffff 268 | text.code.12=ff5555 269 | text.code.13=ff55ff 270 | text.code.14=ffff55 271 | text.code.15=ffffff 272 | text.code.16=000000 273 | text.code.17=00002a 274 | text.code.18=002a00 275 | text.code.19=002a2a 276 | text.code.20=2a0000 277 | text.code.21=2a002a 278 | text.code.22=2a2a00 279 | text.code.23=2a2a2a 280 | text.code.24=151515 281 | text.code.25=15153f 282 | text.code.26=153f15 283 | text.code.27=153f3f 284 | text.code.28=3f1515 285 | text.code.29=3f153f 286 | text.code.30=3f3f15 287 | text.code.31=3f3f3f 288 | 289 | ############################################################################### 290 | # Resource loading screen 291 | ############################################################################### 292 | # Background color 293 | screen.loading=ffffff 294 | # Loading bar background color 295 | screen.loading.bar=ffffff 296 | # Loading bar outline 297 | screen.loading.outline=000000 298 | # Loading bar foreground color 299 | screen.loading.progress=e22837 300 | # Logo blend mode 301 | # Where src, dst, srcA and dstA are one of: 302 | # ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, 303 | # SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE 304 | screen.loading.blend= 305 | 306 | ############################################################################### 307 | # Other options 308 | ############################################################################### 309 | # Override cloud type. 310 | clouds=fast|fancy|off 311 | 312 | # XpOrb animation duration (milliseconds) 313 | # Default is 628 ms 314 | xporb.time=628 315 | 316 | ############################################################################### 317 | # Complete file list 318 | ############################################################################### 319 | # Below is a full list of files used by the Custom Colors mod: 320 | # NOTE: ~ is shorthand for the optifine folder (assets/minecraft/optifine) 321 | # ~/color.properties - this file 322 | # ~/colormap/redstone.png - 16x1 redstone colors (0=fully off, 15=fully on) 323 | # ~/colormap/pumpkinstem.png - 8x1 pumpkin stem colors (0=sprout, 7=fully grown) 324 | # ~/colormap/melonstem.png - 8x1 melon stem colors (0=sprout, 7=fully grown) 325 | # ~/colormap/lavadrop.png - Nx1 lava drop colors (x=age of particle in ticks) 326 | # ~/colormap/myceliumparticle.png - any size, random mycelium particle colors 327 | # ~/colormap/xporb.png - any size, array of xp orb colors 328 | # ~/colormap/durability.png - any size, array of item durability colors 329 | # 330 | # ~/colormap/swampgrass.png - 256x256 swamp grass color palette 331 | # ~/colormap/swampfoliage.png - 256x256 swamp foliage color palette 332 | # ~/colormap/pine.png - 256x256 pine tree color palette 333 | # ~/colormap/birch.png - 256x256 birch tree color palette 334 | # ~/colormap/water.png - 256x256 water color palette 335 | # ~/colormap/underwater.png - 256x256 underwater color 336 | # ~/colormap/underlava.png - 256x256 underlava color 337 | # ~/colormap/fog0.png - 256x256 fog color for the overworld 338 | # ~/colormap/sky0.png - 256x256 sky color for the overworld 339 | # 340 | # ~/lightmap/world0.png - Nx32 or Nx64 overworld lighting palettes 341 | # ~/lightmap/world-1.png - Nx32 or Nx64 Nether lighting palettes 342 | # ~/lightmap/world1.png - Nx32 or Nx64 End lighting palettes 343 | 344 | ############################################################################### 345 | # Custom biome palettes 346 | ############################################################################### 347 | # You may assign custom biome palettes to any standard block (i.e. one that 348 | # does not already have its own special color multiplier method). Each custom 349 | # colormap should have a properties file in ~/colormap/custom. See 350 | # colormap.properties for more details. 351 | # 352 | # Since 1.18 the custom colormaps may have height greater than 256. 353 | # With property "yOffset=-64" they may be used for negative Y coordinates. 354 | # 355 | # Default custom colormap format: 356 | # Mojang-style temperature+humidity maps: 357 | # palette.format=vanilla 358 | # OptiFine-style grid (x=biome ID, y=height) maps: 359 | # palette.format=grid 360 | # Note that this setting does not affect the vanilla foliage and grass 361 | # colormaps in assets/minecraft/textures/colormap. It can also be overridden 362 | # per-colormap in each individual properties file in ~/colormap/custom 363 | -------------------------------------------------------------------------------- /OptiFineDoc/doc/ctm.properties: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Sample configuration for OptiFine's Connected Textures feature. 3 | # Based on the configuration for MCPatcher's Connected Textures mod. 4 | # 5 | # Not implemented: 6 | # - renderPass 7 | # 8 | ############################################################################### 9 | # ctm.properties 10 | ############################################################################### 11 | # 12 | # For each block or terrain tile you wish to override with connected or random 13 | # textures, use this template and create a .properties file in the 14 | # optifine/ctm folder of your texture pack. Properties files can be organized 15 | # into subfolders of any depth, as long as everything is within the top-level 16 | # optifine/ctm folder. 17 | # 18 | # Different types of connected texture methods are available with different 19 | # requirements and restrictions. See below for details for each method. 20 | # 21 | # All property names are case-sensitive. 22 | # All paths are relative to assets/minecraft unless otherwise stated. 23 | ############################################################################### 24 | 25 | ############################################################################### 26 | # General properties used by all methods: 27 | ############################################################################### 28 | 29 | # (Optional) List of block and/or tiles this method should apply to. 30 | # Multiple .properties file can refer to the same block/tile and they will be 31 | # processed in alphabetical order by filename. All tile-based entries are 32 | # checked before block ID-based ones. The first match wins. 33 | matchTiles= 34 | 35 | # To refer to a tile from vanilla MC, simply use its name in textures/block: 36 | # matchTiles=dirt 37 | # To refer to a tile from a mod, you will need to know its name 38 | # matchTiles=botania:blazeblock 39 | # Tiles output by CTM rules can also be matched by another rule. The tile name 40 | # is simply the full path to the tile 41 | # matchTiles=optifine/ctm/mygrass/1.png 42 | # Block format (optional parts are in <>) 43 | # name<:property1=value1,value2...:property2=value1,value2...> 44 | # For example: 45 | # short name: oak_stairs 46 | # full name: minecraft:oak_stairs 47 | # name + properties: minecraft:oak_stairs:facing=east,west:half=bottom 48 | matchBlocks= 49 | 50 | # These two properties can be omitted if they can be inferred from the filename instead: 51 | # - optifine/ctm/xxx/.properties assumes 52 | # matchTiles= 53 | # - optifine/ctm/xxx/block_.properties assumes 54 | # matchBlocks= 55 | # unless you specify either property explicitly. 56 | 57 | # (Optional) If multiple properties files match the same block, the highest 58 | # weighted one is used. In the event of a tie, the properties filenames are 59 | # compared next. The default weight is 0. 60 | weight= 61 | 62 | # (Required) Method to use when choosing a block's replacement texture: 63 | # Methods: 64 | # ctm: Standard 8-way method (glass in the original CTM), uses 47 tiles. 65 | # ctm_compact: Compact 8-way method, uses 5 tiles. 66 | # horizontal: Connect to blocks on left and right only (bookshelves). 67 | # vertical: Connect to blocks above and below only. 68 | # horizontal+vertical: Connect horizontally, then vertically. 69 | # vertical+horizontal: Connect vertically, then horizontally. 70 | # top: Connect to block above only (sandstone). 71 | # random: Pick a tile at random. 72 | # repeat: Repeat a fixed pattern over large areas. 73 | # fixed: Use a single fixed tile. Equivalent to random with only one tile. 74 | # overlay: Overlay for block transitions, uses 17 tiles. 75 | # overlay_ctm: Overlay variant of method "ctm". 76 | # overlay_random: Overlay variant of method "random". 77 | # overlay_repeat: Overlay variant of method "repeat". 78 | # overlay_fixed: Overlay variant of method "fixed". 79 | # The overlay methods can be combined with other methods if they come 80 | # before them in the processing order (alphabetically). 81 | # The method "ctm_compact" is not compatible with any of the overlay methods. 82 | method= 83 | 84 | # (Required) List of replacment tiles to use. Each tile must be a separate 85 | # image, just like terrain and item textures. Tiles can be specified in 86 | # several ways 87 | # 0 -> 0.png 88 | # 8-11 -> 8.png, 9.png, 10.png, 11.png 89 | # name -> name.png 90 | # name.png -> name.png 91 | # -> skip the tile, continue with next CTM properties 92 | # -> use the default texture for that block/tile 93 | # full/path/name.png -> full/path/name.png 94 | # In all cases but the last, the png file must be in the same directory as 95 | # the properties file itself. 96 | # The formats can be mixed and matched, e.g. 97 | # tiles=0-4 5 some/other/name.png 98 | # The overlay methods may use the special name "" for empty tiles 99 | # that are to be skipped. The overlay methods can't use the tile name "". 100 | tiles= 101 | 102 | # (Optional) Connect type. For methods that connect to adjacent blocks, 103 | # specify how the game should decide if two blocks should be connected. 104 | # block: Connect if block id of this block = block id of neighbor. 105 | # tile: Connect if tile texture of this block = tile of neighbor. 106 | # state: Connect if block state (block + properties) = neighbour's 107 | # The default is block for block-based properties files and tile for tile-based. 108 | connect= 109 | 110 | # (Optional) Connect tiles. Only for method "overlay" 111 | # Connects only to blocks which are using the specified tiles 112 | connectTiles= 113 | 114 | # (Optional) Connect blocks. Only for method "overlay" 115 | # Connects only to specified blocks 116 | connectBlocks= 117 | 118 | # (Optional) Faces. 119 | # Limit the mod to only certain faces of the block. 120 | # bottom: Bottom face (negative y). 121 | # top: Top face (positive y). 122 | # north: North face (negative z). 123 | # south: South face (positive z). 124 | # east: East face (positive x). 125 | # west: West face (negative x). 126 | # sides: Shorthand for north south east west. 127 | # all: All sides. 128 | # This property is ignored on non-standard blocks. 129 | faces= 130 | 131 | # (Optional) Biome and height restrictions. 132 | # Limit only to certain biomes or height ranges. 133 | # The vanilla biome names are listed here: https://minecraft.wiki/w/Biome#Biome_IDs 134 | # Biomes added by mods can also be used. 135 | # The legacy properties "minHeight" and "maxHeight" are also recognized. 136 | # Since 1.18 negative values may be specified for height. When used in a range they have to be put in brackets. 137 | biomes= 138 | heights= 139 | 140 | # (Optional) Compact CTM tile replacement. Only for method "ctm_compact" 141 | # Allows to define replacement tile for a specific CTM case 142 | # is the index of the CTM case from the CTM template (0-46) 143 | # is the index of the tile as defined in "tiles" (not the tile name!) 144 | # With "ctm_compact" you can define more than 5 tiles and use the additional 145 | # tiles as replacements 146 | ctm.= 147 | 148 | # (Optional) Tint index. Only for method "overlay" 149 | # Tint index for the tile texture 150 | # Default is -1 (disabled 151 | tintIndex= 152 | 153 | # (Optional) Tint block. Only for method "overlay" 154 | # The block used for the tile texture tinting. 155 | # Different blocks use different colors for the same tint index. 156 | tintBlock= 157 | 158 | # (Optional) Layer. Only for method "overlay" 159 | # The layer on which the overlay texture should be rendered 160 | # Values: 161 | # cutout_mipped - transparent textures with mipmaps 162 | # cutout - transparent textures without mipmaps 163 | # translucent - translucent textures with mipmaps 164 | # Default is "cutout_mipped" 165 | layer= 166 | 167 | # (Optional) Name 168 | # Only for blocks which have corresponding nameable tile entities. 169 | # For example: 170 | # beacon brewing_stand enchanting_table furnace dispenser dropper hopper 171 | # See "custom_guis.properties" for the name matching syntax. 172 | name= 173 | 174 | ############################################################################### 175 | # Everything below here is for specific ctm methods. Each .properties file 176 | # should contain only one of these sections. 177 | ############################################################################### 178 | 179 | ############################################################################### 180 | # Standard 8-way connected textures 181 | ############################################################################### 182 | 183 | method=ctm 184 | # (Required) List of 47 tiles to use. 185 | tiles=<47 tiles> 186 | # (Optional) Whether to show seams on inner edges when connecting to adjacent 187 | # blocks. 188 | innerSeams=false 189 | 190 | ############################################################################### 191 | # Compact 8-way connected textures 192 | ############################################################################### 193 | 194 | method=ctm_compact 195 | # (Required) List of 5 tiles to use. 196 | tiles=<5 tiles> 197 | # (Optional) Whether to show seams on inner edges when connecting to adjacent 198 | # blocks. 199 | innerSeams=false 200 | 201 | ############################################################################### 202 | # Compact 8-way connected textures with special cases 203 | ############################################################################### 204 | 205 | method=ctm_compact 206 | # (Required) List of 5 tiles to use. 207 | tiles=<5 tiles> 208 | # (Optional) Indexes of replacement tiles for some CTM cases 209 | ctm.46=5 210 | ctm.17=6 211 | 212 | ############################################################################### 213 | # Horizontal-only connected textures 214 | ############################################################################### 215 | 216 | method=horizontal 217 | # (Required) List of 4 tiles to use. 218 | tiles=<4 tiles> 219 | 220 | ############################################################################### 221 | # Vertical-only connected textures 222 | ############################################################################### 223 | 224 | method=vertical 225 | # (Required) List of 4 tiles to use. 226 | tiles= 227 | 228 | ############################################################################### 229 | # Top connected textures 230 | ############################################################################### 231 | 232 | method=top 233 | # (Required) Only one tile is needed. 234 | tiles= 235 | 236 | ############################################################################### 237 | # Random textures 238 | ############################################################################### 239 | 240 | method=random 241 | # (Required) List of any number of tiles to choose from. 242 | tiles= 243 | # (Optional) List of weights to apply to the random choice. For example, if 244 | # you have 245 | # tiles=6-11 246 | # weights=10 1 10 2 7 3 247 | # then tiles 6 and 8 will have a weight of 10, 7 will have a weight of 1, etc. 248 | # Weights do not have to total 100 or any other particular value. In the above 249 | # example, tiles 6 and 8 will each be used ~30.3% (10/(10+1+10+2+7+3)) of the 250 | # time and so forth. 251 | weights= 252 | # Random loops 253 | # Repeats the random function several times to increase randomness. 254 | # Can be used to make different textures use different random patterns. 255 | # Higher values may decrease the chunk loading speed. 256 | # Default is 0. 257 | randomLoops=<0-9> 258 | # (Optional) Desired level of symmetry for the faces of each block. Applies to 259 | # standard 6-sided blocks only. 260 | # none: All 6 faces are textured independently. This is the default. 261 | # opposite: 2-way symmetry; opposing faces have the same texture, but each pair 262 | # can potentially have a different texture. 263 | # all: All 6 faces have the same texture. 264 | symmetry= 265 | # (Optional) Texture linking between related blocks. 266 | # If true, OptiFine uses the same random number seed for all parts of a 267 | # multiblock object, for example, the top and bottom halves of tall grass. 268 | # This allows you to create randomized textures that will remain consistent 269 | # within each set of blocks. If this property is false, the two halves will 270 | # be "scrambled", i.e., chosen independently. 271 | # 272 | # NOTE: For this to work properly, you'll need multiple properties files with 273 | # linked=true and the same number of replacement textures and same set of 274 | # weights. For example, 275 | # double_plant_top.properties: 276 | # method=random 277 | # tiles=grass_top1 grass_top2 grass_top3 278 | # weights=1 2 3 279 | # linked=true 280 | 281 | # double_plant_bottom.properties: 282 | # method=random 283 | # tiles=grass_bottom1 grass_bottom2 grass_bottom3 284 | # weights=1 2 3 285 | # linked=true 286 | # 287 | # The default is false. The linked property currently applies only to plants 288 | # (e.g., reeds), double plants, and doors. 289 | linked= 290 | 291 | ############################################################################### 292 | # Repeat pattern textures 293 | ############################################################################### 294 | 295 | method=repeat 296 | # (Required) Width of the repeating pattern. 297 | width= 298 | # (Required) Height of the repeating pattern. 299 | height= 300 | # (Required) List of exactly width * height tiles. 301 | tiles= 302 | # (Optional) Desired level of symmetry for the faces of each block. Applies to 303 | # standard 6-sided blocks only. 304 | # none: All 6 faces are textured so that the pattern tiling looks the same from 305 | # all sides. This is the default. 306 | # opposite: 2-way symmetry; opposing faces have the same texture, which means 307 | # that tiling on the south and east faces will be mirrored left-to-right from 308 | # compared to the north and west faces. 309 | symmetry= 310 | 311 | ############################################################################### 312 | # Fixed textures 313 | ############################################################################### 314 | 315 | method=fixed 316 | # (Required) Single tile to use. 317 | tiles= 318 | --------------------------------------------------------------------------------