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

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

import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.math.vector.Vector3d;
import java.util.UUID;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.math.vector.Transform;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.builder.BuilderCodec;

public class GlobalSpawnProvider implements ISpawnProvider
{
    @Nonnull
    public static BuilderCodec<GlobalSpawnProvider> CODEC;
    private Transform spawnPoint;
    
    public GlobalSpawnProvider() {
    }
    
    public GlobalSpawnProvider(@Nonnull final Transform spawnPoint) {
        this.spawnPoint = spawnPoint;
    }
    
    @Override
    public Transform getSpawnPoint(@Nonnull final World world, @Nonnull final UUID uuid) {
        return this.spawnPoint.clone();
    }
    
    @Nonnull
    @Override
    public Transform[] getSpawnPoints() {
        return new Transform[] { this.spawnPoint };
    }
    
    @Override
    public boolean isWithinSpawnDistance(@Nonnull final Vector3d position, final double distance) {
        return position.distanceSquaredTo(this.spawnPoint.getPosition()) < distance * distance;
    }
    
    static {
        GlobalSpawnProvider.CODEC = BuilderCodec.builder(GlobalSpawnProvider.class, GlobalSpawnProvider::new).documentation("A spawn provider that provides a single static spawn point for all players.").append(new KeyedCodec("SpawnPoint", Transform.CODEC_DEGREES), (o, i) -> o.spawnPoint = i, o -> o.spawnPoint).documentation("The spawn point for all players to spawn at").add().build();
    }
}
