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

package com.hypixel.hytale.builtin.adventure.objectives.config.task;

import java.util.Arrays;
import javax.annotation.Nonnull;
import java.text.MessageFormat;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.builtin.adventure.objectives.config.taskcondition.TaskConditionAsset;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.lookup.CodecMapCodec;

public abstract class ObjectiveTaskAsset
{
    public static final CodecMapCodec<ObjectiveTaskAsset> CODEC;
    public static final BuilderCodec<ObjectiveTaskAsset> BASE_CODEC;
    public static final String TASK_DESCRIPTION_KEY = "server.objectives.{0}.taskSet.{1}.task.{2}";
    protected String descriptionId;
    protected TaskConditionAsset[] taskConditions;
    protected Vector3i[] mapMarkers;
    private String defaultDescriptionId;
    
    public ObjectiveTaskAsset(final String descriptionId, final TaskConditionAsset[] taskConditions, final Vector3i[] mapMarkers) {
        this.descriptionId = descriptionId;
        this.taskConditions = taskConditions;
        this.mapMarkers = mapMarkers;
    }
    
    protected ObjectiveTaskAsset() {
    }
    
    public String getDescriptionId() {
        return this.descriptionId;
    }
    
    @Nonnull
    public String getDescriptionKey(final String objectiveId, final int taskSetIndex, final int taskIndex) {
        if (this.descriptionId != null) {
            return this.descriptionId;
        }
        if (this.defaultDescriptionId == null) {
            this.defaultDescriptionId = MessageFormat.format("server.objectives.{0}.taskSet.{1}.task.{2}", objectiveId, taskSetIndex, taskIndex);
        }
        return this.defaultDescriptionId;
    }
    
    public TaskConditionAsset[] getTaskConditions() {
        return this.taskConditions;
    }
    
    public Vector3i[] getMapMarkers() {
        return this.mapMarkers;
    }
    
    public abstract TaskScope getTaskScope();
    
    public boolean matchesAsset(@Nonnull final ObjectiveTaskAsset task) {
        return Arrays.equals(task.taskConditions, this.taskConditions) && Arrays.equals(task.mapMarkers, this.mapMarkers) && task.getClass().equals(this.getClass()) && this.matchesAsset0(task);
    }
    
    protected abstract boolean matchesAsset0(final ObjectiveTaskAsset p0);
    
    @Nonnull
    @Override
    public String toString() {
        return "ObjectiveTaskAsset{descriptionId='" + this.descriptionId + "', taskConditions=" + Arrays.toString(this.taskConditions) + ", mapMarkers=" + Arrays.toString(this.mapMarkers);
    }
    
    static {
        // 
        // This method could not be decompiled.
        // 
        // Original Bytecode:
        // 
        //     3: dup            
        //     4: ldc             "Type"
        //     6: invokespecial   com/hypixel/hytale/codec/lookup/CodecMapCodec.<init>:(Ljava/lang/String;)V
        //     9: putstatic       com/hypixel/hytale/builtin/adventure/objectives/config/task/ObjectiveTaskAsset.CODEC:Lcom/hypixel/hytale/codec/lookup/CodecMapCodec;
        //    12: ldc             Lcom/hypixel/hytale/builtin/adventure/objectives/config/task/ObjectiveTaskAsset;.class
        //    14: invokestatic    com/hypixel/hytale/codec/builder/BuilderCodec.abstractBuilder:(Ljava/lang/Class;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //    17: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    20: dup            
        //    21: ldc             "DescriptionId"
        //    23: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //    26: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //    29: invokedynamic   BootstrapMethod #1, accept:()Ljava/util/function/BiConsumer;
        //    34: invokedynamic   BootstrapMethod #2, apply:()Ljava/util/function/Function;
        //    39: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    42: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //    45: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //    48: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    51: dup            
        //    52: ldc             "TaskConditions"
        //    54: new             Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //    57: dup            
        //    58: getstatic       com/hypixel/hytale/builtin/adventure/objectives/config/taskcondition/TaskConditionAsset.CODEC:Lcom/hypixel/hytale/codec/lookup/CodecMapCodec;
        //    61: invokedynamic   BootstrapMethod #3, apply:()Ljava/util/function/IntFunction;
        //    66: invokespecial   com/hypixel/hytale/codec/codecs/array/ArrayCodec.<init>:(Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/IntFunction;)V
        //    69: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //    72: invokedynamic   BootstrapMethod #4, accept:()Ljava/util/function/BiConsumer;
        //    77: invokedynamic   BootstrapMethod #5, apply:()Ljava/util/function/Function;
        //    82: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    85: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //    88: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //    91: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    94: dup            
        //    95: ldc             "MapMarkers"
        //    97: new             Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //   100: dup            
        //   101: getstatic       com/hypixel/hytale/math/vector/Vector3i.CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   104: invokedynamic   BootstrapMethod #6, apply:()Ljava/util/function/IntFunction;
        //   109: invokespecial   com/hypixel/hytale/codec/codecs/array/ArrayCodec.<init>:(Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/IntFunction;)V
        //   112: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   115: invokedynamic   BootstrapMethod #7, accept:()Ljava/util/function/BiConsumer;
        //   120: invokedynamic   BootstrapMethod #8, apply:()Ljava/util/function/Function;
        //   125: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.append:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   128: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   131: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   134: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.build:()Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   137: putstatic       com/hypixel/hytale/builtin/adventure/objectives/config/task/ObjectiveTaskAsset.BASE_CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   140: return         
        // 
        // The error that occurred was:
        // 
        // java.lang.UnsupportedOperationException: The requested operation is not supported.
        //     at com.strobel.util.ContractUtils.unsupported(ContractUtils.java:27)
        //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:284)
        //     at com.strobel.assembler.metadata.TypeReference.getRawType(TypeReference.java:279)
        //     at com.strobel.assembler.metadata.TypeReference.makeGenericType(TypeReference.java:154)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:225)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:25)
        //     at com.strobel.assembler.metadata.ParameterizedType.accept(ParameterizedType.java:103)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visit(TypeSubstitutionVisitor.java:40)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:211)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitParameterizedType(TypeSubstitutionVisitor.java:25)
        //     at com.strobel.assembler.metadata.ParameterizedType.accept(ParameterizedType.java:103)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visit(TypeSubstitutionVisitor.java:40)
        //     at com.strobel.assembler.metadata.TypeSubstitutionVisitor.visitMethod(TypeSubstitutionVisitor.java:314)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2611)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1510)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:790)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferCall(TypeAnalysis.java:2689)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1040)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:782)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:778)
        //     at com.strobel.decompiler.ast.TypeAnalysis.doInferTypeForExpression(TypeAnalysis.java:1083)
        //     at com.strobel.decompiler.ast.TypeAnalysis.inferTypeForExpression(TypeAnalysis.java:815)
        //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:684)
        //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:667)
        //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:373)
        //     at com.strobel.decompiler.ast.TypeAnalysis.run(TypeAnalysis.java:95)
        //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:344)
        //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:42)
        //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:206)
        //     at com.strobel.decompiler.languages.java.ast.AstMethodBodyBuilder.createMethodBody(AstMethodBodyBuilder.java:93)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethodBody(AstBuilder.java:868)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createMethod(AstBuilder.java:761)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addTypeMembers(AstBuilder.java:638)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeCore(AstBuilder.java:605)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createTypeNoCache(AstBuilder.java:195)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.createType(AstBuilder.java:162)
        //     at com.strobel.decompiler.languages.java.ast.AstBuilder.addType(AstBuilder.java:137)
        //     at com.strobel.decompiler.languages.java.JavaLanguage.buildAst(JavaLanguage.java:71)
        //     at com.strobel.decompiler.languages.java.JavaLanguage.decompileType(JavaLanguage.java:59)
        //     at com.strobel.decompiler.DecompilerDriver.decompileType(DecompilerDriver.java:333)
        //     at com.strobel.decompiler.DecompilerDriver.decompileJar(DecompilerDriver.java:254)
        //     at com.strobel.decompiler.DecompilerDriver.main(DecompilerDriver.java:129)
        // 
        throw new IllegalStateException("An error occurred while decompiling this method.");
    }
    
    public enum TaskScope
    {
        PLAYER, 
        MARKER, 
        PLAYER_AND_MARKER;
        
        public boolean isTaskPossibleForMarker() {
            return this == TaskScope.MARKER || this == TaskScope.PLAYER_AND_MARKER;
        }
        
        public boolean isTaskPossibleForPlayer() {
            return this == TaskScope.PLAYER || this == TaskScope.PLAYER_AND_MARKER;
        }
    }
}
