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

package com.hypixel.hytale.server.npc.role;

import it.unimi.dsi.fastutil.objects.ObjectList;
import com.hypixel.hytale.server.core.universe.world.ParticleUtil;
import java.util.List;
import com.hypixel.hytale.server.core.modules.entity.EntityModule;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.spatial.SpatialResource;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.math.vector.Vector3f;
import javax.annotation.Nonnull;
import com.hypixel.hytale.math.vector.Vector3d;

public interface SpawnEffect
{
    String getSpawnParticles();
    
    Vector3d getSpawnParticleOffset();
    
    double getSpawnViewDistance();
    
    default void spawnEffect(@Nonnull final Vector3d position, @Nonnull final Vector3f rotation, @Nonnull final ComponentAccessor<EntityStore> componentAccessor) {
        final String particles = this.getSpawnParticles();
        if (particles == null || particles.isEmpty()) {
            return;
        }
        final Vector3d spawnPosition = new Vector3d(0.0, 0.0, 0.0);
        if (this.getSpawnParticleOffset() != null) {
            spawnPosition.assign(this.getSpawnParticleOffset());
        }
        spawnPosition.rotateY(rotation.getYaw()).add(position);
        final SpatialResource<Ref<EntityStore>, EntityStore> playerSpatialResource = componentAccessor.getResource(EntityModule.get().getPlayerSpatialResourceType());
        final ObjectList<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
        playerSpatialResource.getSpatialStructure().collect(spawnPosition, this.getSpawnViewDistance(), results);
        ParticleUtil.spawnParticleEffect(particles, spawnPosition, results, componentAccessor);
    }
}
