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

package com.hypixel.hytale.server.core.modules.entity.repulsion;

import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.assetstore.AssetKeyValidator;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import javax.annotation.Nonnull;
import com.hypixel.hytale.assetstore.AssetRegistry;
import com.hypixel.hytale.assetstore.AssetExtraInfo;
import com.hypixel.hytale.assetstore.AssetStore;
import com.hypixel.hytale.codec.validation.ValidatorCache;
import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
import com.hypixel.hytale.server.core.io.NetworkSerializable;
import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;

public class RepulsionConfig implements JsonAssetWithMap<String, IndexedLookupTableAssetMap<String, RepulsionConfig>>, NetworkSerializable<com.hypixel.hytale.protocol.RepulsionConfig>
{
    public static final AssetBuilderCodec<String, RepulsionConfig> CODEC;
    public static final ValidatorCache<String> VALIDATOR_CACHE;
    private static AssetStore<String, RepulsionConfig, IndexedLookupTableAssetMap<String, RepulsionConfig>> ASSET_STORE;
    public static final int NO_REPULSION = -1;
    protected AssetExtraInfo.Data data;
    protected String id;
    protected float radius;
    protected float minForce;
    protected float maxForce;
    
    public static AssetStore<String, RepulsionConfig, IndexedLookupTableAssetMap<String, RepulsionConfig>> getAssetStore() {
        if (RepulsionConfig.ASSET_STORE == null) {
            RepulsionConfig.ASSET_STORE = AssetRegistry.getAssetStore(RepulsionConfig.class);
        }
        return RepulsionConfig.ASSET_STORE;
    }
    
    public static IndexedLookupTableAssetMap<String, RepulsionConfig> getAssetMap() {
        return getAssetStore().getAssetMap();
    }
    
    public RepulsionConfig() {
    }
    
    public RepulsionConfig(final String id) {
        this.id = id;
    }
    
    public RepulsionConfig(@Nonnull final RepulsionConfig repulsion) {
        this(repulsion.radius, repulsion.minForce, repulsion.maxForce);
    }
    
    public RepulsionConfig(final float radius, final float maxForce) {
        this(radius, 0.0f, maxForce);
    }
    
    public RepulsionConfig(final float radius, final float minForce, final float maxForce) {
        this.radius = radius;
        this.minForce = minForce;
        this.maxForce = maxForce;
    }
    
    @Override
    public String getId() {
        return this.id;
    }
    
    @Nonnull
    @Override
    public com.hypixel.hytale.protocol.RepulsionConfig toPacket() {
        final com.hypixel.hytale.protocol.RepulsionConfig packet = new com.hypixel.hytale.protocol.RepulsionConfig();
        packet.radius = this.radius;
        packet.minForce = this.minForce;
        packet.maxForce = this.maxForce;
        return packet;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "repulsionConfig{data=" + String.valueOf(this.data) + ", id='" + this.id + "', radius=" + this.radius + ", minForce=" + this.minForce + ", maxForce=" + this.maxForce;
    }
    
    static {
        CODEC = ((AssetBuilderCodec.Builder)AssetBuilderCodec.builder(RepulsionConfig.class, RepulsionConfig::new, (Codec<String>)Codec.STRING, (repulsion, s) -> repulsion.id = s, repulsion -> repulsion.id, (repulsion, data) -> repulsion.data = data, repulsion -> repulsion.data).appendInherited(new KeyedCodec<Float>("Radius", Codec.FLOAT), (repulsion, radius) -> repulsion.radius = radius, repulsion -> repulsion.radius, (repulsion, parent) -> repulsion.radius = parent.radius).documentation("The radius around the entity").add().appendInherited(new KeyedCodec("MinForce", Codec.FLOAT), (repulsion, minForce) -> repulsion.minForce = minForce, repulsion -> repulsion.minForce, (repulsion, parent) -> repulsion.minForce = parent.minForce).documentation("The floor of the applied force while within effective radius").add().appendInherited(new KeyedCodec("MaxForce", Codec.FLOAT), (repulsion, maxForce) -> repulsion.maxForce = maxForce, repulsion -> repulsion.maxForce, (repulsion, parent) -> repulsion.maxForce = parent.maxForce).documentation("The max force to be applied at 100% intersection").add()).build();
        VALIDATOR_CACHE = new ValidatorCache<String>(new AssetKeyValidator<String>(RepulsionConfig::getAssetStore));
    }
}
