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

package com.hypixel.hytale.builtin.deployables.config;

import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.builtin.deployables.component.DeployableComponent;
import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.builtin.deployables.DeployablesUtils;
import com.hypixel.hytale.protocol.AnimationSlot;
import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
import com.hypixel.hytale.component.Ref;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.modules.entity.hitboxcollision.HitboxCollisionConfig;
import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
import com.hypixel.hytale.server.core.asset.type.soundevent.config.SoundEvent;
import com.hypixel.hytale.server.core.asset.type.model.config.Model;
import com.hypixel.hytale.server.core.asset.type.model.config.ModelParticle;
import java.util.Map;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.lookup.CodecMapCodec;
import com.hypixel.hytale.server.core.io.NetworkSerializable;

public abstract class DeployableConfig implements NetworkSerializable<com.hypixel.hytale.protocol.DeployableConfig>
{
    public static final CodecMapCodec<DeployableConfig> CODEC;
    public static final BuilderCodec<DeployableConfig> BASE_CODEC;
    protected Map<String, StatConfig> statValues;
    protected String deploySoundEventId;
    protected String despawnSoundEventId;
    protected String dieSoundEventId;
    protected String ambientSoundEventId;
    protected ModelParticle[] spawnParticles;
    protected ModelParticle[] despawnParticles;
    protected transient int deploySoundEventIndex;
    protected transient int despawnSoundEventIndex;
    protected transient int dieSoundEventIndex;
    protected transient int ambientSoundEventIndex;
    protected Model generatedModel;
    protected Model generatedModelPreview;
    protected String hitboxCollisionConfigId;
    protected int hitboxCollisionConfigIndex;
    private String id;
    private int maxLiveCount;
    private String model;
    private String modelPreview;
    private float modelScale;
    private float liveDuration;
    private boolean invulnerable;
    private boolean debugVisuals;
    private boolean allowPlaceOnWalls;
    private boolean wireframeDebugVisuals;
    private boolean countTowardsGlobalLimit;
    
    protected DeployableConfig() {
        this.deploySoundEventIndex = 0;
        this.despawnSoundEventIndex = 0;
        this.dieSoundEventIndex = 0;
        this.ambientSoundEventIndex = 0;
        this.hitboxCollisionConfigIndex = -1;
        this.maxLiveCount = Integer.MAX_VALUE;
        this.modelScale = 1.0f;
        this.liveDuration = 1.0f;
        this.countTowardsGlobalLimit = true;
    }
    
    private static void processConfig(final DeployableConfig config) {
        if (config.deploySoundEventId != null) {
            config.deploySoundEventIndex = SoundEvent.getAssetMap().getIndex(config.deploySoundEventId);
        }
        if (config.despawnSoundEventId != null) {
            config.despawnSoundEventIndex = SoundEvent.getAssetMap().getIndex(config.despawnSoundEventId);
        }
        if (config.dieSoundEventId != null) {
            config.dieSoundEventIndex = SoundEvent.getAssetMap().getIndex(config.dieSoundEventId);
        }
        if (config.ambientSoundEventId != null) {
            config.ambientSoundEventIndex = SoundEvent.getAssetMap().getIndex(config.ambientSoundEventId);
        }
        if (config.generatedModel != null) {
            config.generatedModel = Model.createScaledModel(ModelAsset.getAssetMap().getAsset(config.model), config.modelScale);
        }
        if (config.generatedModelPreview != null) {
            config.generatedModelPreview = Model.createScaledModel(ModelAsset.getAssetMap().getAsset(config.modelPreview), config.modelScale);
        }
        if (config.hitboxCollisionConfigId != null) {
            config.hitboxCollisionConfigIndex = HitboxCollisionConfig.getAssetMap().getIndexOrDefault(config.hitboxCollisionConfigId, -1);
        }
    }
    
    protected static void playAnimation(@Nonnull final Store<EntityStore> store, @Nonnull final Ref<EntityStore> ref, @Nonnull final DeployableConfig config, @Nonnull final String animationSetKey) {
        final EntityStore externalData = store.getExternalData();
        final NetworkId networkIdComponent = store.getComponent(ref, NetworkId.getComponentType());
        DeployablesUtils.playAnimation(store, networkIdComponent.getId(), ref, config, AnimationSlot.Action, null, animationSetKey);
    }
    
    protected static void stopAnimation(@Nonnull final Store<EntityStore> store, @Nonnull final ArchetypeChunk<EntityStore> archetypeChunk, final int index) {
        final EntityStore externalData = store.getExternalData();
        final Ref<EntityStore> ref = archetypeChunk.getReferenceTo(index);
        if (ref == null || !ref.isValid()) {
            return;
        }
        final NetworkId networkIdComponent = archetypeChunk.getComponent(index, NetworkId.getComponentType());
        DeployablesUtils.stopAnimation(store, networkIdComponent.getId(), ref, AnimationSlot.Action);
    }
    
    public Model getModel() {
        if (this.generatedModel != null) {
            return this.generatedModel;
        }
        return this.generatedModel = Model.createScaledModel(ModelAsset.getAssetMap().getAsset(this.model), this.modelScale);
    }
    
    public Model getModelPreview() {
        if (this.modelPreview == null) {
            return null;
        }
        if (this.generatedModelPreview != null) {
            return this.generatedModelPreview;
        }
        return this.generatedModelPreview = Model.createScaledModel(ModelAsset.getAssetMap().getAsset(this.modelPreview), this.modelScale);
    }
    
    public int getHitboxCollisionConfigIndex() {
        return this.hitboxCollisionConfigIndex;
    }
    
    public long getLiveDurationInMillis() {
        return (long)(this.liveDuration * 1000.0f);
    }
    
    public float getLiveDuration() {
        return this.liveDuration;
    }
    
    public String getId() {
        return this.id;
    }
    
    public int getMaxLiveCount() {
        return this.maxLiveCount;
    }
    
    public boolean getInvulnerable() {
        return this.invulnerable;
    }
    
    public Map<String, StatConfig> getStatValues() {
        return this.statValues;
    }
    
    public int getDespawnSoundEventIndex() {
        return this.despawnSoundEventIndex;
    }
    
    public int getDeploySoundEventIndex() {
        return this.deploySoundEventIndex;
    }
    
    public int getDieSoundEventIndex() {
        return this.dieSoundEventIndex;
    }
    
    public int getAmbientSoundEventIndex() {
        return this.ambientSoundEventIndex;
    }
    
    public ModelParticle[] getSpawnParticles() {
        return this.spawnParticles;
    }
    
    public ModelParticle[] getDespawnParticles() {
        return this.despawnParticles;
    }
    
    public boolean getDebugVisuals() {
        return this.debugVisuals;
    }
    
    public boolean getAllowPlaceOnWalls() {
        return this.allowPlaceOnWalls;
    }
    
    public boolean getWireframeDebugVisuals() {
        return this.wireframeDebugVisuals;
    }
    
    public boolean getCountTowardsGlobalLimit() {
        return this.countTowardsGlobalLimit;
    }
    
    public void tick(@Nonnull final DeployableComponent deployableComponent, final float dt, final int index, @Nonnull final ArchetypeChunk<EntityStore> archetypeChunk, @Nonnull final Store<EntityStore> store, @Nonnull final CommandBuffer<EntityStore> commandBuffer) {
    }
    
    public void firstTick(@Nonnull final DeployableComponent deployableComponent, final float dt, final int index, @Nonnull final ArchetypeChunk<EntityStore> archetypeChunk, @Nonnull final Store<EntityStore> store, @Nonnull final CommandBuffer<EntityStore> commandBuffer) {
    }
    
    @Override
    public com.hypixel.hytale.protocol.DeployableConfig toPacket() {
        final com.hypixel.hytale.protocol.DeployableConfig config = new com.hypixel.hytale.protocol.DeployableConfig();
        config.model = this.getModel().toPacket();
        if (this.modelPreview != null) {
            config.modelPreview = this.getModelPreview().toPacket();
        }
        config.allowPlaceOnWalls = this.allowPlaceOnWalls;
        return config;
    }
    
    @Override
    public String toString() {
        return "DeployableConfig{}";
    }
    
    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/deployables/config/DeployableConfig.CODEC:Lcom/hypixel/hytale/codec/lookup/CodecMapCodec;
        //    12: ldc             Lcom/hypixel/hytale/builtin/deployables/config/DeployableConfig;.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             "Id"
        //    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 #0, accept:()Ljava/util/function/BiConsumer;
        //    34: invokedynamic   BootstrapMethod #1, apply:()Ljava/util/function/Function;
        //    39: invokedynamic   BootstrapMethod #2, accept:()Ljava/util/function/BiConsumer;
        //    44: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    47: ldc_w           "Used to identify this deployable for uses such as MaxLiveCount"
        //    50: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    53: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //    56: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //    59: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //    62: dup            
        //    63: ldc_w           "MaxLiveCount"
        //    66: getstatic       com/hypixel/hytale/codec/Codec.INTEGER:Lcom/hypixel/hytale/codec/codecs/simple/IntegerCodec;
        //    69: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //    72: invokedynamic   BootstrapMethod #3, accept:()Ljava/util/function/BiConsumer;
        //    77: invokedynamic   BootstrapMethod #4, apply:()Ljava/util/function/Function;
        //    82: invokedynamic   BootstrapMethod #5, accept:()Ljava/util/function/BiConsumer;
        //    87: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    90: ldc_w           "The maximum amount of this deployable that can be live at once"
        //    93: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //    96: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //    99: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   102: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   105: dup            
        //   106: ldc_w           "Model"
        //   109: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   112: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   115: invokedynamic   BootstrapMethod #6, accept:()Ljava/util/function/BiConsumer;
        //   120: invokedynamic   BootstrapMethod #7, apply:()Ljava/util/function/Function;
        //   125: invokedynamic   BootstrapMethod #8, accept:()Ljava/util/function/BiConsumer;
        //   130: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   133: invokestatic    com/hypixel/hytale/codec/validation/Validators.nonNull:()Lcom/hypixel/hytale/codec/validation/Validator;
        //   136: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   139: getstatic       com/hypixel/hytale/server/core/asset/type/model/config/ModelAsset.VALIDATOR_CACHE:Lcom/hypixel/hytale/codec/validation/ValidatorCache;
        //   142: invokevirtual   com/hypixel/hytale/codec/validation/ValidatorCache.getValidator:()Lcom/hypixel/hytale/codec/validation/Validator;
        //   145: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   148: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   151: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   154: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   157: dup            
        //   158: ldc_w           "ModelPreview"
        //   161: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   164: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   167: invokedynamic   BootstrapMethod #9, accept:()Ljava/util/function/BiConsumer;
        //   172: invokedynamic   BootstrapMethod #10, apply:()Ljava/util/function/Function;
        //   177: invokedynamic   BootstrapMethod #11, accept:()Ljava/util/function/BiConsumer;
        //   182: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   185: getstatic       com/hypixel/hytale/server/core/asset/type/model/config/ModelAsset.VALIDATOR_CACHE:Lcom/hypixel/hytale/codec/validation/ValidatorCache;
        //   188: invokevirtual   com/hypixel/hytale/codec/validation/ValidatorCache.getValidator:()Lcom/hypixel/hytale/codec/validation/Validator;
        //   191: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   194: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   197: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   200: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   203: dup            
        //   204: ldc_w           "ModelScale"
        //   207: getstatic       com/hypixel/hytale/codec/Codec.FLOAT:Lcom/hypixel/hytale/codec/codecs/simple/FloatCodec;
        //   210: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   213: invokedynamic   BootstrapMethod #12, accept:()Ljava/util/function/BiConsumer;
        //   218: invokedynamic   BootstrapMethod #13, apply:()Ljava/util/function/Function;
        //   223: invokedynamic   BootstrapMethod #14, accept:()Ljava/util/function/BiConsumer;
        //   228: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   231: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   234: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   237: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   240: dup            
        //   241: ldc_w           "LiveDuration"
        //   244: getstatic       com/hypixel/hytale/codec/Codec.FLOAT:Lcom/hypixel/hytale/codec/codecs/simple/FloatCodec;
        //   247: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   250: invokedynamic   BootstrapMethod #15, accept:()Ljava/util/function/BiConsumer;
        //   255: invokedynamic   BootstrapMethod #16, apply:()Ljava/util/function/Function;
        //   260: invokedynamic   BootstrapMethod #17, accept:()Ljava/util/function/BiConsumer;
        //   265: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   268: ldc_w           "The duration of the lifetime of the deployable in seconds"
        //   271: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   274: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   277: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   280: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   283: dup            
        //   284: ldc_w           "Invulnerable"
        //   287: getstatic       com/hypixel/hytale/codec/Codec.BOOLEAN:Lcom/hypixel/hytale/codec/codecs/simple/BooleanCodec;
        //   290: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   293: invokedynamic   BootstrapMethod #18, accept:()Ljava/util/function/BiConsumer;
        //   298: invokedynamic   BootstrapMethod #19, apply:()Ljava/util/function/Function;
        //   303: invokedynamic   BootstrapMethod #20, accept:()Ljava/util/function/BiConsumer;
        //   308: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   311: ldc_w           "Whether this deployable is invulnerable to damage or not"
        //   314: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   317: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   320: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   323: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   326: dup            
        //   327: ldc_w           "Stats"
        //   330: new             Lcom/hypixel/hytale/codec/codecs/map/MapCodec;
        //   333: dup            
        //   334: getstatic       com/hypixel/hytale/builtin/deployables/config/DeployableConfig$StatConfig.CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   337: invokedynamic   BootstrapMethod #21, get:()Ljava/util/function/Supplier;
        //   342: invokespecial   com/hypixel/hytale/codec/codecs/map/MapCodec.<init>:(Lcom/hypixel/hytale/codec/Codec;Ljava/util/function/Supplier;)V
        //   345: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   348: invokedynamic   BootstrapMethod #22, accept:()Ljava/util/function/BiConsumer;
        //   353: invokedynamic   BootstrapMethod #23, apply:()Ljava/util/function/Function;
        //   358: invokedynamic   BootstrapMethod #24, accept:()Ljava/util/function/BiConsumer;
        //   363: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   366: ldc_w           "The default stat configuration for the deployable"
        //   369: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   372: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   375: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   378: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   381: dup            
        //   382: ldc_w           "DeploySoundEventId"
        //   385: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   388: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   391: invokedynamic   BootstrapMethod #25, accept:()Ljava/util/function/BiConsumer;
        //   396: invokedynamic   BootstrapMethod #26, apply:()Ljava/util/function/Function;
        //   401: invokedynamic   BootstrapMethod #27, accept:()Ljava/util/function/BiConsumer;
        //   406: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   409: ldc_w           "The ID of the sound to play upon deployment (at deployment location)"
        //   412: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   415: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.ONESHOT:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$LoopValidator;
        //   418: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   421: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.MONO:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$ChannelValidator;
        //   424: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   427: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   430: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   433: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   436: dup            
        //   437: ldc_w           "DespawnSoundEventId"
        //   440: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   443: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   446: invokedynamic   BootstrapMethod #28, accept:()Ljava/util/function/BiConsumer;
        //   451: invokedynamic   BootstrapMethod #29, apply:()Ljava/util/function/Function;
        //   456: invokedynamic   BootstrapMethod #30, accept:()Ljava/util/function/BiConsumer;
        //   461: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   464: ldc_w           "The ID of the sound to play when despawning"
        //   467: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   470: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.ONESHOT:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$LoopValidator;
        //   473: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   476: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.MONO:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$ChannelValidator;
        //   479: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   482: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   485: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   488: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   491: dup            
        //   492: ldc_w           "DieSoundEventId"
        //   495: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   498: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   501: invokedynamic   BootstrapMethod #31, accept:()Ljava/util/function/BiConsumer;
        //   506: invokedynamic   BootstrapMethod #32, apply:()Ljava/util/function/Function;
        //   511: invokedynamic   BootstrapMethod #33, accept:()Ljava/util/function/BiConsumer;
        //   516: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   519: ldc_w           "The ID of the sound to play when despawning due to death"
        //   522: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   525: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.ONESHOT:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$LoopValidator;
        //   528: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   531: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.MONO:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$ChannelValidator;
        //   534: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   537: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   540: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   543: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   546: dup            
        //   547: ldc_w           "AmbientSoundEventId"
        //   550: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   553: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   556: invokedynamic   BootstrapMethod #34, accept:()Ljava/util/function/BiConsumer;
        //   561: invokedynamic   BootstrapMethod #35, apply:()Ljava/util/function/Function;
        //   566: invokedynamic   BootstrapMethod #36, accept:()Ljava/util/function/BiConsumer;
        //   571: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   574: ldc_w           "The ID of the sound to play ambiently from the deployable while it's in the world"
        //   577: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   580: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.LOOPING:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$LoopValidator;
        //   583: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   586: getstatic       com/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators.MONO:Lcom/hypixel/hytale/server/core/asset/type/soundevent/validator/SoundEventValidators$ChannelValidator;
        //   589: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   592: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   595: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   598: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   601: dup            
        //   602: ldc_w           "SpawnParticles"
        //   605: getstatic       com/hypixel/hytale/server/core/asset/type/model/config/ModelParticle.ARRAY_CODEC:Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //   608: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   611: invokedynamic   BootstrapMethod #37, accept:()Ljava/util/function/BiConsumer;
        //   616: invokedynamic   BootstrapMethod #38, apply:()Ljava/util/function/Function;
        //   621: invokedynamic   BootstrapMethod #39, accept:()Ljava/util/function/BiConsumer;
        //   626: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   629: ldc_w           "A collection of model particles to play when this deployable is spawned."
        //   632: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   635: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   638: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   641: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   644: dup            
        //   645: ldc_w           "DespawnParticles"
        //   648: getstatic       com/hypixel/hytale/server/core/asset/type/model/config/ModelParticle.ARRAY_CODEC:Lcom/hypixel/hytale/codec/codecs/array/ArrayCodec;
        //   651: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   654: invokedynamic   BootstrapMethod #40, accept:()Ljava/util/function/BiConsumer;
        //   659: invokedynamic   BootstrapMethod #41, apply:()Ljava/util/function/Function;
        //   664: invokedynamic   BootstrapMethod #42, accept:()Ljava/util/function/BiConsumer;
        //   669: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   672: ldc_w           "A collection of model particles to play when this deployable is despawned."
        //   675: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   678: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   681: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   684: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   687: dup            
        //   688: ldc_w           "DebugVisuals"
        //   691: getstatic       com/hypixel/hytale/codec/Codec.BOOLEAN:Lcom/hypixel/hytale/codec/codecs/simple/BooleanCodec;
        //   694: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   697: invokedynamic   BootstrapMethod #43, accept:()Ljava/util/function/BiConsumer;
        //   702: invokedynamic   BootstrapMethod #44, apply:()Ljava/util/function/Function;
        //   707: invokedynamic   BootstrapMethod #45, accept:()Ljava/util/function/BiConsumer;
        //   712: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   715: ldc_w           "Whether or not to display debug visuals."
        //   718: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   721: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   724: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   727: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   730: dup            
        //   731: ldc_w           "AllowPlaceOnWalls"
        //   734: getstatic       com/hypixel/hytale/codec/Codec.BOOLEAN:Lcom/hypixel/hytale/codec/codecs/simple/BooleanCodec;
        //   737: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   740: invokedynamic   BootstrapMethod #46, accept:()Ljava/util/function/BiConsumer;
        //   745: invokedynamic   BootstrapMethod #47, apply:()Ljava/util/function/Function;
        //   750: invokedynamic   BootstrapMethod #48, accept:()Ljava/util/function/BiConsumer;
        //   755: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   758: ldc_w           "Whether or not this deployable can be placed on walls."
        //   761: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   764: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   767: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   770: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   773: dup            
        //   774: ldc_w           "WireframeDebugVisuals"
        //   777: getstatic       com/hypixel/hytale/codec/Codec.BOOLEAN:Lcom/hypixel/hytale/codec/codecs/simple/BooleanCodec;
        //   780: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   783: invokedynamic   BootstrapMethod #49, accept:()Ljava/util/function/BiConsumer;
        //   788: invokedynamic   BootstrapMethod #50, apply:()Ljava/util/function/Function;
        //   793: invokedynamic   BootstrapMethod #51, accept:()Ljava/util/function/BiConsumer;
        //   798: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   801: ldc_w           "Whether debug visuals will be wireframe or have color."
        //   804: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   807: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   810: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   813: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   816: dup            
        //   817: ldc_w           "HitboxCollisionConfig"
        //   820: getstatic       com/hypixel/hytale/codec/Codec.STRING:Lcom/hypixel/hytale/codec/codecs/simple/StringCodec;
        //   823: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   826: invokedynamic   BootstrapMethod #52, accept:()Ljava/util/function/BiConsumer;
        //   831: invokedynamic   BootstrapMethod #53, apply:()Ljava/util/function/Function;
        //   836: invokedynamic   BootstrapMethod #54, accept:()Ljava/util/function/BiConsumer;
        //   841: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   844: ldc_w           "The HitboxCollision config to apply to the deployable."
        //   847: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   850: getstatic       com/hypixel/hytale/server/core/modules/entity/hitboxcollision/HitboxCollisionConfig.VALIDATOR_CACHE:Lcom/hypixel/hytale/codec/validation/ValidatorCache;
        //   853: invokevirtual   com/hypixel/hytale/codec/validation/ValidatorCache.getValidator:()Lcom/hypixel/hytale/codec/validation/Validator;
        //   856: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   859: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   862: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   865: new             Lcom/hypixel/hytale/codec/KeyedCodec;
        //   868: dup            
        //   869: ldc_w           "CountTowardsGlobalLimit"
        //   872: getstatic       com/hypixel/hytale/codec/Codec.BOOLEAN:Lcom/hypixel/hytale/codec/codecs/simple/BooleanCodec;
        //   875: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
        //   878: invokedynamic   BootstrapMethod #55, accept:()Ljava/util/function/BiConsumer;
        //   883: invokedynamic   BootstrapMethod #56, apply:()Ljava/util/function/Function;
        //   888: invokedynamic   BootstrapMethod #57, accept:()Ljava/util/function/BiConsumer;
        //   893: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.appendInherited:(Lcom/hypixel/hytale/codec/KeyedCodec;Ljava/util/function/BiConsumer;Ljava/util/function/Function;Ljava/util/function/BiConsumer;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   896: ldc_w           "Whether or not this deployable counts towards global deployable limit"
        //   899: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
        //   902: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   905: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   908: invokedynamic   BootstrapMethod #58, accept:()Ljava/util/function/Consumer;
        //   913: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.afterDecode:(Ljava/util/function/Consumer;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
        //   916: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
        //   919: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.build:()Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   922: putstatic       com/hypixel/hytale/builtin/deployables/config/DeployableConfig.BASE_CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
        //   925: 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: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: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.inferTypesForVariables(TypeAnalysis.java:593)
        //     at com.strobel.decompiler.ast.TypeAnalysis.runInference(TypeAnalysis.java:405)
        //     at com.strobel.decompiler.ast.TypeAnalysis.run(TypeAnalysis.java:95)
        //     at com.strobel.decompiler.ast.AstOptimizer.optimize(AstOptimizer.java:109)
        //     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 static class StatConfig
    {
        private static final BuilderCodec<StatConfig> CODEC;
        private float max;
        private float initial;
        
        private StatConfig() {
            this.initial = Float.MAX_VALUE;
        }
        
        public float getMax() {
            return this.max;
        }
        
        public float getInitial() {
            return this.initial;
        }
        
        static {
            // 
            // This method could not be decompiled.
            // 
            // Original Bytecode:
            // 
            //     2: invokedynamic   BootstrapMethod #0, get:()Ljava/util/function/Supplier;
            //     7: invokestatic    com/hypixel/hytale/codec/builder/BuilderCodec.builder:(Ljava/lang/Class;Ljava/util/function/Supplier;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    10: ldc             "Initial and maximum values for a stat."
            //    12: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    15: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    18: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    21: dup            
            //    22: ldc             "Max"
            //    24: getstatic       com/hypixel/hytale/codec/Codec.FLOAT:Lcom/hypixel/hytale/codec/codecs/simple/FloatCodec;
            //    27: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
            //    30: invokedynamic   BootstrapMethod #1, accept:()Ljava/util/function/BiConsumer;
            //    35: invokedynamic   BootstrapMethod #2, apply:()Ljava/util/function/Function;
            //    40: 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;
            //    43: invokestatic    com/hypixel/hytale/codec/validation/Validators.nonNull:()Lcom/hypixel/hytale/codec/validation/Validator;
            //    46: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
            //    49: fconst_0       
            //    50: invokestatic    java/lang/Float.valueOf:(F)Ljava/lang/Float;
            //    53: invokestatic    com/hypixel/hytale/codec/validation/Validators.greaterThan:(Ljava/lang/Comparable;)Lcom/hypixel/hytale/codec/validation/Validator;
            //    56: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.addValidator:(Lcom/hypixel/hytale/codec/validation/Validator;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
            //    59: ldc             "The maximum value for the stat."
            //    61: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
            //    64: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //    67: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //    70: new             Lcom/hypixel/hytale/codec/KeyedCodec;
            //    73: dup            
            //    74: ldc             "Initial"
            //    76: getstatic       com/hypixel/hytale/codec/Codec.FLOAT:Lcom/hypixel/hytale/codec/codecs/simple/FloatCodec;
            //    79: invokespecial   com/hypixel/hytale/codec/KeyedCodec.<init>:(Ljava/lang/String;Lcom/hypixel/hytale/codec/Codec;)V
            //    82: invokedynamic   BootstrapMethod #3, accept:()Ljava/util/function/BiConsumer;
            //    87: invokedynamic   BootstrapMethod #4, apply:()Ljava/util/function/Function;
            //    92: 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;
            //    95: ldc             "The initial value for the stat. If omitted, will be set to max."
            //    97: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.documentation:(Ljava/lang/String;)Lcom/hypixel/hytale/codec/builder/BuilderField$FieldBuilder;
            //   100: invokevirtual   com/hypixel/hytale/codec/builder/BuilderField$FieldBuilder.add:()Lcom/hypixel/hytale/codec/builder/BuilderCodec$BuilderBase;
            //   103: checkcast       Lcom/hypixel/hytale/codec/builder/BuilderCodec$Builder;
            //   106: invokevirtual   com/hypixel/hytale/codec/builder/BuilderCodec$Builder.build:()Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   109: putstatic       com/hypixel/hytale/builtin/deployables/config/DeployableConfig$StatConfig.CODEC:Lcom/hypixel/hytale/codec/builder/BuilderCodec;
            //   112: 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: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: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: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.addTypeMembers(AstBuilder.java:662)
            //     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.");
        }
    }
}
