{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.player.crossbow": {
            "initial_state": "default",
            "states": {
                "charge": {
                    "animations": [ "third_person_crossbow_equipped" ],
                    "transitions": [
                        {
                            "default": "query.get_equipped_item_name != 'crossbow' || (query.item_remaining_use_duration <= 0.0 && !query.item_is_charged)"
                        },
                        {
                            "hold": "query.item_is_charged"
                        }
                    ]
                },
                "default": {
                    "transitions": [
                        {
                            "hold": "query.item_is_charged"
                        },
                        {
                            "charge": "query.item_remaining_use_duration > 0.0"
                        }
                    ]
                },
                "hold": {
                    "animations": [ "crossbow_hold" ],
                    "transitions": [
                        {
                            "default": "query.get_equipped_item_name != 'crossbow' || (query.item_remaining_use_duration <= 0.0 && !query.item_is_charged)"
                        },
                        {
                            "charge": "query.item_remaining_use_duration > 0.0"
                        }
                    ]
                }
            }
        },
        "controller.animation.player.melee_spear": {
            "initial_state": "hold",
            "states": {
                "hold": {
                    "animations": [ "third_person_melee_spear_hold" ],
                    "transitions": [
                        {
                            "use": "variable.item_use_normalized > 0.0"
                        },
                        {
                            "attack": "variable.attack_time > 0.0"
                        }
                    ]
                },
                "use": {
                    "animations": [ "third_person_melee_spear_use" ],
                    "transitions": [
                        {
                            "hold": "variable.item_use_normalized == 0.0"
                        }
                    ]
                },
                "attack": {
                    "animations": [ "third_person_melee_spear_attack" ],
                    "transitions": [
                        {
                            "hold": "variable.attack_time == 0.0"
                        },
                        {
                            // Allow transitioning from attack to use for smoother animation, since a spear can be used while its attack
                            // animation is still playing. The reverse transition is unnecessary, as attacking while using is not possible.
                            "use": "variable.item_use_normalized > 0.0"
                        }
                    ]
                }
            }
        },
        "controller.animation.player.first_person_attack": {
            "initial_state": "default",
            "states": {
                "default": {
                    "animations": [ "first_person_attack_rotation" ],
                    "transitions": [
                        {
                            "vr_attack": "variable.is_using_vr"
                        }
                    ]
                },
                "vr_attack": {
                    "animations": [ "first_person_vr_attack_rotation" ],
                    "transitions": [
                        {
                            "default": "!variable.is_using_vr"
                        }
                    ]
                }
            }
        },
        "controller.animation.player.first_person_map": {
            "initial_state": "default",
            "states": {
                "default": {
                    "transitions": [
                        {
                            "one_hand": "query.get_equipped_item_name('off_hand') == 'filled_map' || query.get_equipped_item_name('off_hand') == 'shield'"
                        },
                        {
                            "two_hand": "query.get_equipped_item_name('off_hand') != 'filled_map' && query.get_equipped_item_name('off_hand') != 'shield'"
                        }
                    ]
                },
                "one_hand": {
                    "animations": [
                        {
                            "first_person_map_hold_main_hand": "query.get_equipped_item_name(0, 1) == 'filled_map'"
                        },
                        {
                            "first_person_map_hold_off_hand": "query.get_equipped_item_name('off_hand') == 'filled_map' && (query.get_equipped_item_name == 'bow' ? !(variable.item_use_normalized > 0 && variable.item_use_normalized < 1.0) : 1.0)"
                        }
                    ],
                    "transitions": [
                        {
                            "default": "query.get_equipped_item_name(0, 1) != 'filled_map' && query.get_equipped_item_name('off_hand') != 'filled_map'"
                        },
                        {
                            "two_hand": "query.get_equipped_item_name('off_hand') != 'filled_map' && query.get_equipped_item_name('off_hand') != 'shield'"
                        }
                    ]
                },
                "two_hand": {
                    "animations": [ "first_person_map_hold", "first_person_map_hold_attack" ],
                    "transitions": [
                        {
                            "default": "query.get_equipped_item_name(0, 1) != 'filled_map' && query.get_equipped_item_name('off_hand') != 'filled_map'"
                        },
                        {
                            "one_hand": "query.get_equipped_item_name('off_hand') == 'filled_map' || query.get_equipped_item_name('off_hand') == 'shield'"
                        }
                    ]
                }
            }
        },
        "controller.animation.player.first_person_melee_spear": {
            "initial_state": "hold",
            "states": {
                "hold": {
                    "animations": [ "first_person_melee_spear_hold" ],
                    "transitions": [
                        {
                            "use": "variable.item_use_normalized > 0.0"
                        },
                        {
                            "attack": "variable.attack_time > 0.0"
                        }
                    ]
                },
                "use": {
                    "animations": [ "first_person_melee_spear_use" ],
                    "transitions": [
                        {
                            "hold": "variable.item_use_normalized == 0.0"
                        }
                    ]
                },
                "attack": {
                    "animations": [ "first_person_melee_spear_attack" ],
                    "transitions": [
                        {
                            "hold": "variable.attack_time == 0.0"
                        },
                        {
                            // Allow transitioning from attack to use for smoother animation, since a spear can be used while its attack
                            // animation is still playing. The reverse transition is unnecessary, as attacking while using is not possible.
                            "use": "variable.item_use_normalized > 0.0"
                        }
                    ],
                    "blend_transition": 0.2,
                    "blend_via_shortest_path": true
                }
            }
        },
        "controller.animation.player.root": {
            "initial_state": "first_person",
            "states": {
                "first_person": {
                    "animations": [
                        "first_person_base_pose",
                        "first_person_breathing_bob",
                        {
                            "first_person_swap_item": "!query.blocking"
                        },
                        {
                            "first_person_shield_block": "query.blocking"
                        },
                        {
                            "first_person_attack_controller": "variable.attack_time > 0.0 && query.get_equipped_item_name != 'filled_map' && !variable.melee_spear_equipped"
                        },
                        {
                            "first_person_empty_hand": "query.get_equipped_item_name(0, 1) != 'filled_map'"
                        },
                        {
                            "first_person_walk": "variable.bob_animation"
                        },
                        {
                            "first_person_map_controller": "query.get_equipped_item_name(0, 1) == 'filled_map' || query.get_equipped_item_name('off_hand') == 'filled_map'"
                        },
                        {
                            "first_person_crossbow_equipped": "query.get_equipped_item_name == 'crossbow' && variable.item_use_normalized > 0.0 && variable.item_use_normalized < 1.0"
                        },
                        {
                            "first_person_melee_spear_controller": "variable.melee_spear_equipped"
                        }
                    ],
                    "transitions": [
                        {
                            "paperdoll": "variable.is_paperdoll"
                        },
                        {
                            "map_player": "variable.map_face_icon"
                        },
                        {
                            "third_person": "!variable.is_first_person"
                        }
                    ]
                },
                "map_player": {
                    "transitions": [
                        {
                            "paperdoll": "variable.is_paperdoll"
                        },
                        {
                            "first_person": "variable.is_first_person"
                        },
                        {
                            "third_person": "!variable.map_face_icon && !variable.is_first_person"
                        }
                    ]
                },
                "paperdoll": {
                    "animations": [ "humanoid_base_pose", "look_at_target_ui", "move.arms", "move.legs", "cape" ],
                    "transitions": [
                        {
                            "first_person": "!variable.is_paperdoll && variable.is_first_person"
                        },
                        {
                            "map_player": "variable.map_face_icon"
                        },
                        {
                            "third_person": "!variable.is_paperdoll && !variable.is_first_person"
                        }
                    ]
                },
                "third_person": {
                    "animations": [
                        "humanoid_base_pose",
                        {
                            "look_at_target": "!query.is_sleeping && !query.is_emoting"
                        },
                        "move.arms",
                        "move.legs",
                        "cape",
                        {
                            "riding.root": "query.is_riding"
                        },
                        {
                            "riding.arms": "query.is_riding"
                        },
                        {
                            "riding.legs": "query.is_riding"
                        },
                        "holding",
                        {
                            // Refers to Trident-like items, for the Spear, see "melee_spear" animations.
                            "brandish_spear": "variable.is_brandishing_spear"
                        },
                        {
                            "holding_spyglass": "variable.is_holding_spyglass"
                        },
                        {
                            "charging": "query.is_charging"
                        },
                        {
                            "sneaking": "query.is_sneaking && !query.is_sleeping"
                        },
                        {
                            "bob": "!variable.is_holding_spyglass && !variable.is_tooting_goat_horn && !variable.is_using_brush"
                        },
                        {
                            "damage_nearby_mobs": "variable.damage_nearby_mobs"
                        },
                        {
                            "swimming": "variable.swim_amount > 0.0 && !variable.melee_spear_equipped"
                        },
                        {
                            "swimming.no_right_arm": "variable.swim_amount > 0.0 && variable.melee_spear_equipped"
                        },
                        {
                            "swimming.legs": "variable.swim_amount > 0.0"
                        },
                        {
                            "crawling": "query.is_crawling && !variable.melee_spear_equipped"
                        },
                        {
                            "crawling.no_right_arm": "query.is_crawling && variable.melee_spear_equipped"
                        },
                        {
                            "crawling.legs": "query.is_crawling"
                        },
                        {
                            "use_item_progress": "( variable.use_item_interval_progress > 0.0 ) || ( variable.use_item_startup_progress > 0.0 ) && !variable.is_brandishing_spear && !variable.is_holding_spyglass && !variable.is_tooting_goat_horn && !variable.is_using_brush && !query.is_item_name_any('slot.weapon.mainhand', 'minecraft:bow')"
                        },
                        {
                            "sleeping": "query.is_sleeping && query.is_alive"
                        },
                        {
                            "attack.positions": "variable.attack_time >= 0.0 && !variable.melee_spear_equipped"
                        },
                        {
                            "attack.rotations": "variable.attack_time >= 0.0 && !variable.melee_spear_equipped"
                        },
                        {
                            "shield_block_main_hand": "query.blocking && query.get_equipped_item_name('off_hand') != 'shield' && query.get_equipped_item_name == 'shield'"
                        },
                        {
                            "shield_block_off_hand": "query.blocking && query.get_equipped_item_name('off_hand') == 'shield'"
                        },
                        {
                            "crossbow_controller": "query.get_equipped_item_name == 'crossbow'"
                        },
                        {
                            "third_person_bow_equipped": "query.get_equipped_item_name == 'bow' && (variable.item_use_normalized > 0 && variable.item_use_normalized < 1.0)"
                        },
                        {
                            "tooting_goat_horn": "variable.is_tooting_goat_horn"
                        },
                        {
                            "holding_brush": "query.get_equipped_item_name == 'brush'"
                        },
                        {
                            "brushing": "variable.is_using_brush"
                        },
                        {
                            "holding_heavy_core": "query.is_item_name_any('slot.weapon.mainhand', 'minecraft:heavy_core')"
                        },
                        {
                            "third_person_melee_spear_controller": "variable.melee_spear_equipped"
                        }
                    ],
                    "transitions": [
                        {
                            "paperdoll": "variable.is_paperdoll"
                        },
                        {
                            "first_person": "variable.is_first_person"
                        },
                        {
                            "map_player": "variable.map_face_icon"
                        }
                    ]
                }
            }
        }
    }
}
