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

package com.hypixel.hytale.builtin.adventure.npcobjectives.assets;

import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.Codec;
import java.util.Objects;
import javax.annotation.Nonnull;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.builtin.adventure.objectives.config.taskcondition.TaskConditionAsset;
import com.hypixel.hytale.builtin.adventure.objectives.config.worldlocationproviders.WorldLocationProvider;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.builtin.adventure.objectives.config.task.ObjectiveTaskAsset;

public class BountyObjectiveTaskAsset extends ObjectiveTaskAsset
{
    public static final BuilderCodec<BountyObjectiveTaskAsset> CODEC;
    protected String npcId;
    protected WorldLocationProvider worldLocationProvider;
    
    public BountyObjectiveTaskAsset(final String descriptionId, final TaskConditionAsset[] taskConditions, final Vector3i[] mapMarkers, final String npcId, final WorldLocationProvider worldLocationProvider) {
        super(descriptionId, taskConditions, mapMarkers);
        this.npcId = npcId;
        this.worldLocationProvider = worldLocationProvider;
    }
    
    protected BountyObjectiveTaskAsset() {
    }
    
    @Nonnull
    @Override
    public TaskScope getTaskScope() {
        return TaskScope.PLAYER;
    }
    
    public String getNpcId() {
        return this.npcId;
    }
    
    public WorldLocationProvider getWorldLocationProvider() {
        return this.worldLocationProvider;
    }
    
    @Override
    protected boolean matchesAsset0(final ObjectiveTaskAsset task) {
        if (task instanceof final BountyObjectiveTaskAsset asset) {
            return Objects.equals(asset.npcId, this.npcId) && Objects.equals(asset.worldLocationProvider, this.worldLocationProvider);
        }
        return false;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "BountyObjectiveTaskAsset{npcId='" + this.npcId + "', worldLocationCondition=" + String.valueOf(this.worldLocationProvider) + "} " + super.toString();
    }
    
    static {
        CODEC = BuilderCodec.builder(BountyObjectiveTaskAsset.class, BountyObjectiveTaskAsset::new, ObjectiveTaskAsset.BASE_CODEC).append(new KeyedCodec<String>("NpcId", Codec.STRING), (bountyObjectiveTaskAsset, s) -> bountyObjectiveTaskAsset.npcId = s, bountyObjectiveTaskAsset -> bountyObjectiveTaskAsset.npcId).add().append(new KeyedCodec("WorldLocationCondition", WorldLocationProvider.CODEC), (bountyObjectiveTaskAsset, worldLocationCondition) -> bountyObjectiveTaskAsset.worldLocationProvider = worldLocationCondition, bountyObjectiveTaskAsset -> bountyObjectiveTaskAsset.worldLocationProvider).addValidator(Validators.nonNull()).add().build();
    }
}
