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

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

import com.hypixel.hytale.server.core.plugin.registry.AssetRegistry;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.system.ISystem;
import com.hypixel.hytale.builtin.adventure.camera.system.CameraEffectSystem;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import com.hypixel.hytale.builtin.adventure.camera.command.CameraEffectCommand;
import com.hypixel.hytale.builtin.adventure.camera.asset.viewbobbing.ViewBobbingPacketGenerator;
import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
import com.hypixel.hytale.builtin.adventure.camera.asset.viewbobbing.ViewBobbing;
import com.hypixel.hytale.protocol.MovementType;
import com.hypixel.hytale.server.core.asset.packet.AssetPacketGenerator;
import com.hypixel.hytale.builtin.adventure.camera.asset.camerashake.CameraShakePacketGenerator;
import java.util.function.Function;
import com.hypixel.hytale.assetstore.codec.AssetCodec;
import com.hypixel.hytale.assetstore.JsonAsset;
import com.hypixel.hytale.assetstore.map.IndexedAssetMap;
import com.hypixel.hytale.builtin.adventure.camera.asset.camerashake.CameraShake;
import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
import com.hypixel.hytale.builtin.adventure.camera.interaction.CameraShakeInteraction;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.builtin.adventure.camera.asset.cameraeffect.CameraShakeEffect;
import com.hypixel.hytale.server.core.asset.type.camera.CameraEffect;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import com.hypixel.hytale.server.core.plugin.JavaPlugin;

public class CameraPlugin extends JavaPlugin
{
    private static final String CODEC_CAMERA_SHAKE = "CameraShake";
    
    public CameraPlugin(@Nonnull final JavaPluginInit init) {
        super(init);
    }
    
    @Override
    protected void setup() {
        final AssetRegistry assetRegistry = this.getAssetRegistry();
        this.getCodecRegistry(CameraEffect.CODEC).register("CameraShake", CameraShakeEffect.class, CameraShakeEffect.CODEC);
        this.getCodecRegistry(Interaction.CODEC).register("CameraShake", CameraShakeInteraction.class, CameraShakeInteraction.CODEC);
        assetRegistry.register(((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(String.class, CameraShake.class, new IndexedAssetMap()).loadsBefore(CameraEffect.class).setCodec(CameraShake.CODEC)).setPath("Camera/CameraShake")).setKeyFunction(CameraShake::getId)).setReplaceOnRemove(CameraShake::new)).setPacketGenerator(new CameraShakePacketGenerator()).build());
        assetRegistry.register(((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(MovementType.class, ViewBobbing.class, new DefaultAssetMap()).setCodec()).setPath("Camera/ViewBobbing")).setKeyFunction(ViewBobbing::getId)).setPacketGenerator(new ViewBobbingPacketGenerator()).build());
        this.getCommandRegistry().registerCommand(new CameraEffectCommand());
        this.getEntityStoreRegistry().registerSystem(new CameraEffectSystem());
    }
}
