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

package com.hypixel.hytale.server.core.universe.world.spawn;

import com.hypixel.hytale.math.vector.Vector3d;
import java.util.UUID;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.entity.UUIDComponent;
import com.hypixel.hytale.math.vector.Transform;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.lookup.BuilderCodecMapCodec;

public interface ISpawnProvider
{
    @Nonnull
    public static final BuilderCodecMapCodec<ISpawnProvider> CODEC = new BuilderCodecMapCodec<ISpawnProvider>(true);
    
    default Transform getSpawnPoint(@Nonnull final Ref<EntityStore> ref, @Nonnull final ComponentAccessor<EntityStore> componentAccessor) {
        final UUIDComponent uuidComponent = componentAccessor.getComponent(ref, UUIDComponent.getComponentType());
        assert uuidComponent != null;
        final World world = componentAccessor.getExternalData().getWorld();
        return this.getSpawnPoint(world, uuidComponent.getUuid());
    }
    
    @Deprecated(forRemoval = true)
    default Transform getSpawnPoint(@Nonnull final Entity entity) {
        return this.getSpawnPoint(entity.getWorld(), entity.getUuid());
    }
    
    Transform getSpawnPoint(@Nonnull final World p0, @Nonnull final UUID p1);
    
    @Deprecated
    Transform[] getSpawnPoints();
    
    boolean isWithinSpawnDistance(@Nonnull final Vector3d p0, final double p1);
    
    default static {
        if (ISpawnProvider$1.$assertionsDisabled) {}
    }
}
