{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "silverlabs_nat:elephant",
      "materials": { "default": "entity_alphatest" },
      "textures": {
        "default": "textures/sf/nba/entity/elephant/elephant",
        "baby": "textures/sf/nba/entity/elephant/elephant_baby"
      },
      "geometry": {
        "default": "geometry.silverlabs_nat.elephant",
        "baby": "geometry.silverlabs_nat.elephant_baby"
      },
      "animations": {
        "walk": "animation.silverlabs_nat.elephant.walk2",
        "look_at_target": "animation.silverlabs_nat.elephant.look_at_target",
        "body_rotation": "animation.silverlabs_nat.elephant.body_rotation",
        "idle": "animation.silverlabs_nat.elephant.idle",
        "water": "animation.silverlabs_nat.elephant.water",
        "swing": "animation.silverlabs_nat.elephant.swing",
        "drink": "animation.silverlabs_nat.elephant.drink",
        "move": "controller.animation.silverlabs_nat.elephant.move",
        "attack": "controller.animation.silverlabs_nat.elephant.attack",
        "drinking": "controller.animation.silverlabs_nat.elephant.drinking",
        "body_rotation_controller": "controller.animation.silverlabs_nat.elephant.body_rotation",
        "baby_idle": "animation.silverlabs_nat.elephant_baby.idle",
        "baby_walk": "animation.silverlabs_nat.elephant_baby.walk",
        "baby_run": "animation.silverlabs_nat.elephant_baby.run",
        "baby_playful": "animation.silverlabs_nat.elephant_baby.playful",
        "baby_idle_event": "animation.silverlabs_nat.elephant_baby.idle_event",
        "baby_look_at_target": "animation.silverlabs_nat.look_at_target",
        "baby_body_rotation": "animation.silverlabs_nat.elephant_baby.body_rotation",
        "baby_move": "controller.animation.silverlabs_nat.elephant.baby_move",
        "baby_look_at_target_controller": "controller.animation.silverlabs_nat.elephant.baby_look_at_target",
        "baby_body_rotation_controller": "controller.animation.silverlabs_nat.elephant.baby_body_rotation",
        "baby_idle_event_controller": "controller.animation.silverlabs_nat.elephant.baby_idle_event"
      },
      "scripts": {
        "initialize": [
          "v.anim_speed_multiplier = 0;",
          "v.anim_speed_movement_max = 0;"
        ],
        "pre_animation": [
          "v.anim_speed_multiplier = 1.5;",
          "v.anim_speed_movement_max = 0.5;",
          "v.head_y_rot = q.is_baby ? math.clamp(q.target_y_rotation, -45, 45) : math.clamp(q.target_y_rotation, -35, 35);",
          "v.head_x_rot = q.is_baby ? math.clamp(q.target_x_rotation, -45, 22.5) : math.clamp(q.target_x_rotation, -45, 30);",
          "v.target_head_rot_x = q.is_baby ? math.clamp(q.target_x_rotation, -45, 22.5) : math.clamp(q.target_x_rotation, -45, 30);",
          "v.head_rot_x = math.lerp(v.head_rot_x ?? 0.0, v.target_head_rot_x, 0.1);",
          "v.target_head_rot_y = q.modified_move_speed < 0.01 ? v.head_y_rot : 0.0;",
          "v.head_rot_y = math.lerp(v.head_rot_y ?? 0.0, v.target_head_rot_y, 0.1);",
          "v.body_rot_x = q.is_baby ? math.lerp(v.body_rot_x ?? 0.0, v.target_head_rot_x * 0.3, 0.05) : math.clamp(math.lerp(v.body_rot_x ?? 0.0, v.target_head_rot_x * 0.3, 0.05), -10, 10);",
          "v.body_rot_y = q.is_baby ? math.lerp(v.body_rot_y ?? 0.0, v.target_head_rot_y * 0.3, 0.05) : math.clamp(math.lerp(v.body_rot_y ?? 0.0, v.target_head_rot_y * 0.3, 0.05), -10, 10);",
          "v.trunk_immediate_y = v.head_y_rot * (q.is_baby ? 0.5 : 0.35);",
          "v.trunk_target_y = math.lerp(v.trunk_target_y ?? 0, v.trunk_immediate_y, q.is_baby ? 0.4 : 0.3);",
          "v.trunk_target_y = math.lerp(v.trunk_target_y, 0, 0.15);",
          "v.trunk_y = math.lerp(v.trunk_y ?? 0, v.trunk_target_y, q.is_baby ? 0.15 : 0.1);",
          "v.trunk_immediate_x = q.is_baby ? (-v.head_x_rot + math.abs(v.head_y_rot) * 0.1) : (-v.head_x_rot * 0.8 + math.abs(v.head_y_rot) * 0.08);",
          "v.trunk_target_x = math.lerp(v.trunk_target_x ?? 0, v.trunk_immediate_x, q.is_baby ? 0.4 : 0.3);",
          "v.trunk_target_x = math.lerp(v.trunk_target_x, 0, v.head_x_rot == 0 && v.head_y_rot == 0 ? 0.15 : (q.is_baby ? 0.03 : 0.02));",
          "v.trunk_x = math.lerp(v.trunk_x ?? 0, v.trunk_target_x, q.is_baby ? 0.15 : 0.1);"
        ],
        "animate": [
          { "body_rotation_controller": "!q.is_baby" },
          { "baby_body_rotation_controller": "q.is_baby" },
          { "look_at_target": "!q.is_baby" },
          { "baby_look_at_target_controller": "q.is_baby" },
          { "move": "!q.is_baby" },
          { "baby_move": "q.is_baby" },
          { "baby_idle_event_controller": "q.is_baby" },
          "attack",
          "drinking"
        ]
      },
      "particle_effects": {
        "dirt": "silverlabs_nat:elephant_dirt"
      },
      "render_controllers": ["controller.render.silverlabs_nat.elephant"],
      "spawn_egg": {
        "texture": "silverlabs_nat.elephant_spawn_egg"
      },
      "sound_effects": {
        "water": "silverlabs_nat.elephant.water",
        "drink": "silverlabs_nat.elephant.drink",
        "attack": "silverlabs_nat.elephant.attack",
        "step": "silverlabs_nat.step.largehoof",
        "step_-6dB": "silverlabs_nat.step.largehoof_-6dB",
        "step_-12dB": "silverlabs_nat.step.largehoof_-12dB"
      }
    }
  }
}
