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

package com.hypixel.hytale.builtin.commandmacro;

import java.util.Iterator;
import com.hypixel.hytale.server.core.command.system.AbstractCommand;
import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
import com.hypixel.hytale.assetstore.AssetRegistry;
import com.hypixel.hytale.assetstore.codec.AssetCodec;
import java.util.function.Function;
import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import com.hypixel.hytale.server.core.command.system.CommandRegistration;
import java.util.Map;
import com.hypixel.hytale.server.core.plugin.JavaPlugin;

public class MacroCommandPlugin extends JavaPlugin
{
    private static MacroCommandPlugin instance;
    private final Map<String, CommandRegistration> macroCommandRegistrations;
    
    public static MacroCommandPlugin get() {
        return MacroCommandPlugin.instance;
    }
    
    public MacroCommandPlugin(@Nonnull final JavaPluginInit init) {
        super(init);
        this.macroCommandRegistrations = new Object2ObjectOpenHashMap<String, CommandRegistration>();
    }
    
    @Override
    protected void setup() {
        MacroCommandPlugin.instance = this;
        AssetRegistry.register(((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(MacroCommandBuilder.class, new DefaultAssetMap()).setPath()).setKeyFunction(MacroCommandBuilder::getId)).setCodec(MacroCommandBuilder.CODEC)).build());
        this.getEventRegistry().register(LoadedAssetsEvent.class, MacroCommandBuilder.class, this::loadCommandMacroAsset);
        this.getCommandRegistry().registerCommand(new WaitCommand());
        this.getCommandRegistry().registerCommand(new EchoCommand());
    }
    
    public void loadCommandMacroAsset(@Nonnull final LoadedAssetsEvent<String, MacroCommandBuilder, DefaultAssetMap<String, MacroCommandBuilder>> event) {
        for (final MacroCommandBuilder value : event.getLoadedAssets().values()) {
            if (this.macroCommandRegistrations.containsKey(value.getName())) {
                this.macroCommandRegistrations.get(value.getName()).unregister();
            }
            final CommandRegistration commandRegistration = MacroCommandBuilder.createAndRegisterCommand(value);
            if (commandRegistration != null) {
                this.macroCommandRegistrations.put(value.getName(), commandRegistration);
            }
        }
    }
}
