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

package com.hypixel.hytale.server.worldgen;

import javax.annotation.Nullable;
import com.hypixel.hytale.component.Archetype;
import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.component.query.Query;
import com.hypixel.hytale.server.worldgen.zone.ZoneDiscoveryConfig;
import com.hypixel.hytale.server.worldgen.zone.Zone;
import com.hypixel.hytale.server.worldgen.biome.Biome;
import com.hypixel.hytale.server.worldgen.chunk.ZoneBiomeResult;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.universe.world.worldgen.IWorldGen;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.server.core.universe.world.WorldMapTracker;
import com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Store;
import javax.annotation.Nonnull;
import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.system.tick.DelayedEntitySystem;

public class BiomeDataSystem extends DelayedEntitySystem<EntityStore>
{
    public BiomeDataSystem() {
        super(1.0f);
    }
    
    @Override
    public void tick(final float dt, final int index, @Nonnull final ArchetypeChunk<EntityStore> archetypeChunk, @Nonnull final Store<EntityStore> store, @Nonnull final CommandBuffer<EntityStore> commandBuffer) {
        final World world = commandBuffer.getExternalData().getWorld();
        final IWorldGen worldGen = world.getChunkStore().getGenerator();
        final Player playerComponent = archetypeChunk.getComponent(index, Player.getComponentType());
        assert playerComponent != null;
        final Ref<EntityStore> ref = archetypeChunk.getReferenceTo(index);
        final WorldMapTracker worldMapTracker = playerComponent.getWorldMapTracker();
        if (!(worldGen instanceof ChunkGenerator)) {
            worldMapTracker.updateCurrentZoneAndBiome(ref, null, null, commandBuffer);
            return;
        }
        final ChunkGenerator generator = (ChunkGenerator)worldGen;
        final TransformComponent transformComponent = archetypeChunk.getComponent(index, TransformComponent.getComponentType());
        assert transformComponent != null;
        final Vector3d position = transformComponent.getPosition();
        final int seed = (int)world.getWorldConfig().getSeed();
        final int x = (int)position.getX();
        final int z = (int)position.getZ();
        final ZoneBiomeResult result = generator.getZoneBiomeResultAt(seed, x, z);
        final Biome biome = result.getBiome();
        final Zone zone = result.getZoneResult().getZone();
        final ZoneDiscoveryConfig discoveryConfig = zone.discoveryConfig();
        final WorldMapTracker.ZoneDiscoveryInfo zoneDiscoveryInfo = new WorldMapTracker.ZoneDiscoveryInfo(discoveryConfig.zone(), zone.name(), discoveryConfig.display(), discoveryConfig.soundEventId(), discoveryConfig.icon(), discoveryConfig.major(), discoveryConfig.duration(), discoveryConfig.fadeInDuration(), discoveryConfig.fadeOutDuration());
        worldMapTracker.updateCurrentZoneAndBiome(ref, zoneDiscoveryInfo, biome.getName(), commandBuffer);
    }
    
    @Nullable
    @Override
    public Query<EntityStore> getQuery() {
        return (Query<EntityStore>)Archetype.of(Player.getComponentType(), TransformComponent.getComponentType());
    }
}
