/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/
/**
 * A version that tells minecraft what type of data format can be expected when reading this file.
 */
type FormatVersion = string;
/**
 * How does time pass when playing the animation. Defaults to `query.anim_time + query.delta_time` which means advance in seconds.
 */
type AnimationTimeUpdate = (string | number);
/**
 * Override calculated value (set as the last keyframe time) and set animation length in seconds.
 */
type AnimationLength = number;
/**
 * The weight of the animation when blending with other animations. Defaults to 1.
 */
type BlendWeight = (string | number);
/**
 * The Position transformation during this animation.
 */
type Position = (PositionArray | {
    [k: string]: TimelineObject;
});
/**
 * An array of 3 items that describe the bones position.
 *
 * @minItems 3
 * @maxItems 3
 */
type PositionArray = [PositionX, PositionY, PositionZ];
/**
 * The position over the X-axis or forwards/backwards.
 * Can be molang or a float
 */
type PositionX = (string | number);
/**
 * The position over the Y-axis, or up/down.
 * Can be molang or a float
 */
type PositionY = (string | number);
/**
 * The position over the Z-axis, or left/right.
 * Can be molang or a float
 */
type PositionZ = (string | number);
/**
 * A single point in time.
 */
type TimelineObject = (MolangNumber | PositionArray1 | {
    lerp_mode?: LerpMode;
    pre?: Pre;
    post?: Pre1;
});
/**
 * Uniform position.
 */
type MolangNumber = (string | number);
/**
 * An array of 3 items that describe the bones position.
 *
 * @minItems 3
 * @maxItems 3
 */
type PositionArray1 = [PositionX, PositionY, PositionZ];
/**
 * UNDOCUMENTED.
 */
type LerpMode = ("linear" | "catmullrom");
/**
 * UNDOCUMENTED.
 *
 * @minItems 3
 * @maxItems 3
 */
type Pre = [PositionX, PositionY, PositionZ];
/**
 * UNDOCUMENTED.
 *
 * @minItems 3
 * @maxItems 3
 */
type Pre1 = [PositionX, PositionY, PositionZ];
/**
 * The rotation transformation during this animation.
 */
type Rotation = (RotationArray | {
    [k: string]: TimelineObject1;
});
/**
 * An array of 3 items that describe the bones rotation.
 *
 * @minItems 3
 * @maxItems 3
 */
type RotationArray = [RotationX, RotationY, RotationZ];
/**
 * The rotation over the X-axis, or up or down.
 * Can be molang or a float
 */
type RotationX = (string | number);
/**
 * The rotation over the Y-axis, or yaw.
 * Can be molang or a float
 */
type RotationY = (string | number);
/**
 * The rotation over the Z-axis, or roll.
 * Can be molang or a float
 */
type RotationZ = (string | number);
/**
 * A single point in time.
 */
type TimelineObject1 = (MolangNumber1 | RotationArray1 | {
    lerp_mode?: LerpMode1;
    pre?: Pre2;
    post?: Pre3;
});
/**
 * Uniform rotation.
 */
type MolangNumber1 = (string | number);
/**
 * UNDOCUMENTED.
 *
 * @minItems 3
 * @maxItems 3
 */
type RotationArray1 = [RotationX, RotationY, RotationZ];
/**
 * UNDOCUMENTED.
 */
type LerpMode1 = ("linear" | "catmullrom");
/**
 * UNDOCUMENTED.
 *
 * @minItems 3
 * @maxItems 3
 */
type Pre2 = [RotationX, RotationY, RotationZ];
/**
 * UNDOCUMENTED.
 *
 * @minItems 3
 * @maxItems 3
 */
type Pre3 = [RotationX, RotationY, RotationZ];
/**
 * If set, makes the bone rotation relative to the entity instead of the bone's parent.
 */
type Rotation1 = string;
/**
 * UNDOCUMENTED.
 */
type Scale = (MolangNumber2 | ScaleArray | {
    [k: string]: TimelineObject2;
});
/**
 * Uniform scale.
 */
type MolangNumber2 = (string | number);
/**
 * An array of 3 items that describe the bones scale.
 *
 * @minItems 3
 * @maxItems 3
 */
type ScaleArray = [ScaleX, ScaleY, ScaleZ];
/**
 * The scale over the X-axis or forwards/backwards.
 * Can be molang or a float
 */
type ScaleX = (string | number);
/**
 * The scale over the Y-axis, or up/down.
 * Can be molang or a float
 */
type ScaleY = (string | number);
/**
 * The scale over the Z-axis, or left/right.
 * Can be molang or a float
 */
type ScaleZ = (string | number);
/**
 * A single point in time.
 */
type TimelineObject2 = (MolangNumber3 | ScaleArray1 | {
    lerp_mode?: LerpMode2;
    pre?: ScaleArray2;
    post?: ScaleArray3;
});
/**
 * Uniform rotation.
 */
type MolangNumber3 = (string | number);
/**
 * An array of 3 items that describe the bones scale.
 *
 * @minItems 3
 * @maxItems 3
 */
type ScaleArray1 = [ScaleX, ScaleY, ScaleZ];
/**
 * UNDOCUMENTED.
 */
type LerpMode2 = ("linear" | "catmullrom");
/**
 * An array of 3 items that describe the bones scale.
 *
 * @minItems 3
 * @maxItems 3
 */
type ScaleArray2 = [ScaleX, ScaleY, ScaleZ];
/**
 * An array of 3 items that describe the bones scale.
 *
 * @minItems 3
 * @maxItems 3
 */
type ScaleArray3 = [ScaleX, ScaleY, ScaleZ];
/**
 * Should this animation stop, loop, or stay on the last frame when finished (true, false, hold_on_last_frame).
 */
type Loop = (boolean | "hold_on_last_frame");
/**
 * How long to wait in seconds before looping this animation. Note that this expression is evaluated after each loop and on looping animation only.
 */
type LoopDelay = (string | number);
/**
 * Reset bones in this animation to the default pose before applying this animation.
 */
type OverridePreviousAnimation = boolean;
/**
 * A single point in time.
 */
type TimelineObject3 = (ParticleEffect | ParticleEffect1[]);
/**
 * The name of a particle effect that should be played.
 */
type ParticleId = string;
/**
 * The name of a locator on the actor where the effect should be located.
 */
type Locator = string;
/**
 * A molang script that will be run when the particle emitter is initialized.
 */
type PreEffectScript = string;
/**
 * Set to false to have the effect spawned in the world without being bound to an actor (by default an effect is bound to the actor).
 */
type BindToActor = false;
/**
 * How long to wait in seconds before playing this animation. Note that this expression is evaluated once before playing, and only re-evaluated if asked to play from the beginning again. A looping animation should use `loop_delay` if it wants a delay between loops.
 */
type StartDelay = (string | number);
/**
 * A single point in time.
 */
type TimelineObject4 = (SoundEffect1 | SoundEffect2[]);
/**
 * Valid sound effect names should be listed in the entity's resource_definition json file.
 */
type Effect = string;
/**
 * Variable definition.
 */
type Molang = string;
/**
 * Variable definition.
 */
type Molang1 = string;
type CollectionTimelimeItems = Molang1[];
/**
 * The RP animation that changes an actors models, or molang data.
 */
export interface ResourceAnimation {
    format_version: FormatVersion;
    animations: AnimationsSchema;
}
/**
 * The animation specification.
 */
interface AnimationsSchema {
    [k: string]: Animation;
}
/**
 * The animation specification.
 */
interface Animation {
    anim_time_update?: AnimationTimeUpdate;
    animation_length?: AnimationLength;
    blend_weight?: BlendWeight;
    bones?: Bones;
    loop?: Loop;
    loop_delay?: LoopDelay;
    override_previous_animation?: OverridePreviousAnimation;
    particle_effects?: ParticleEffects;
    start_delay?: StartDelay;
    sound_effects?: SoundEffect;
    timeline?: Timeline;
}
/**
 * Defines how the bones in an animation move or transform.
 */
interface Bones {
    [k: string]: BoneTransformation;
}
/**
 * The bone definition that declare how it transforms during animation.
 */
interface BoneTransformation {
    position?: Position;
    rotation?: Rotation;
    relative_to?: RelativeTo;
    scale?: Scale;
}
/**
 * If set, makes the bone rotation relative to the entity instead of the bone's parent.
 */
interface RelativeTo {
    rotation?: Rotation1;
    [k: string]: unknown;
}
/**
 * UNDOCUMENTED.
 */
interface ParticleEffects {
    [k: string]: TimelineObject3;
}
interface ParticleEffect {
    effect: ParticleId;
    locator?: Locator;
    pre_effect_script?: PreEffectScript;
    bind_to_actor?: BindToActor;
}
interface ParticleEffect1 {
    effect: ParticleId;
    locator?: Locator;
    pre_effect_script?: PreEffectScript;
    bind_to_actor?: BindToActor;
}
/**
 * UNDOCUMENTED.
 */
interface SoundEffect {
    [k: string]: TimelineObject4;
}
interface SoundEffect1 {
    effect?: Effect;
}
interface SoundEffect2 {
    effect?: Effect;
}
/**
 * The time line.
 */
interface Timeline {
    [k: string]: (Molang | CollectionTimelimeItems);
}
export {};
