// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.adventure.camera.asset.camerashake;

import com.hypixel.hytale.assetstore.AssetKeyValidator;
import com.hypixel.hytale.assetstore.codec.AssetCodec;
import com.hypixel.hytale.assetstore.codec.ContainedAssetCodec;
import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.assetstore.AssetRegistry;
import com.hypixel.hytale.builtin.adventure.camera.asset.CameraShakeConfig;
import com.hypixel.hytale.assetstore.AssetExtraInfo;
import com.hypixel.hytale.assetstore.AssetStore;
import com.hypixel.hytale.codec.validation.ValidatorCache;
import com.hypixel.hytale.codec.Codec;
import javax.annotation.Nonnull;
import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
import com.hypixel.hytale.assetstore.map.IndexedAssetMap;
import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
import com.hypixel.hytale.server.core.io.NetworkSerializable;

public class CameraShake implements NetworkSerializable<com.hypixel.hytale.protocol.CameraShake>, JsonAssetWithMap<String, IndexedAssetMap<String, CameraShake>>
{
    @Nonnull
    public static final AssetBuilderCodec<String, CameraShake> CODEC;
    @Nonnull
    public static final Codec<String> CHILD_ASSET_CODEC;
    @Nonnull
    public static final ValidatorCache<String> VALIDATOR_CACHE;
    private static AssetStore<String, CameraShake, IndexedAssetMap<String, CameraShake>> ASSET_STORE;
    protected String id;
    protected AssetExtraInfo.Data data;
    @Nonnull
    protected CameraShakeConfig firstPerson;
    @Nonnull
    protected CameraShakeConfig thirdPerson;
    
    @Nonnull
    public static AssetStore<String, CameraShake, IndexedAssetMap<String, CameraShake>> getAssetStore() {
        if (CameraShake.ASSET_STORE == null) {
            CameraShake.ASSET_STORE = AssetRegistry.getAssetStore(CameraShake.class);
        }
        return CameraShake.ASSET_STORE;
    }
    
    @Nonnull
    public static IndexedAssetMap<String, CameraShake> getAssetMap() {
        return getAssetStore().getAssetMap();
    }
    
    public CameraShake() {
    }
    
    public CameraShake(@Nonnull final String id) {
        this.id = id;
    }
    
    @Nonnull
    @Override
    public com.hypixel.hytale.protocol.CameraShake toPacket() {
        return new com.hypixel.hytale.protocol.CameraShake(this.firstPerson.toPacket(), this.thirdPerson.toPacket());
    }
    
    @Override
    public String getId() {
        return this.id;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "CameraShake{id='" + this.id + "', data=" + String.valueOf(this.data) + ", firstPerson=" + String.valueOf(this.firstPerson) + ", thirdPerson=" + String.valueOf(this.thirdPerson);
    }
    
    static {
        CODEC = ((AssetBuilderCodec.Builder)AssetBuilderCodec.builder(CameraShake.class, CameraShake::new, (Codec<String>)Codec.STRING, (o, v) -> o.id = v, CameraShake::getId, (o, data) -> o.data = data, o -> o.data).appendInherited(new KeyedCodec<CameraShakeConfig>("FirstPerson", CameraShakeConfig.CODEC), (o, v) -> o.firstPerson = v, o -> o.firstPerson, (o, p) -> o.firstPerson = p.firstPerson).documentation("The camera shake to apply to the first-person camera").addValidator(Validators.nonNull()).add().appendInherited(new KeyedCodec("ThirdPerson", CameraShakeConfig.CODEC), (o, v) -> o.thirdPerson = v, o -> o.thirdPerson, (o, p) -> o.thirdPerson = p.thirdPerson).documentation("The camera shake to apply to the third-person camera").addValidator(Validators.nonNull()).add()).build();
        CHILD_ASSET_CODEC = new ContainedAssetCodec<String, Object, Object>(CameraShake.class, CameraShake.CODEC);
        VALIDATOR_CACHE = new ValidatorCache<String>(new AssetKeyValidator<String>(CameraShake::getAssetStore));
    }
}
