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

package com.hypixel.hytale.builtin.adventure.objectives.markers;

import com.hypixel.hytale.builtin.adventure.objectives.task.ObjectiveTask;
import com.hypixel.hytale.builtin.adventure.objectives.Objective;
import java.util.Iterator;
import com.hypixel.hytale.builtin.adventure.objectives.ObjectiveDataStore;
import java.util.Set;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.protocol.packets.worldmap.MapMarker;
import java.util.UUID;
import com.hypixel.hytale.builtin.adventure.objectives.ObjectivePlugin;
import com.hypixel.hytale.server.core.universe.world.worldmap.markers.MapMarkerTracker;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.worldmap.WorldMapManager;

public class ObjectiveMarkerProvider implements WorldMapManager.MarkerProvider
{
    public static final ObjectiveMarkerProvider INSTANCE;
    
    private ObjectiveMarkerProvider() {
    }
    
    @Override
    public void update(@Nonnull final World world, @Nonnull final MapMarkerTracker tracker, final int chunkViewRadius, final int playerChunkX, final int playerChunkZ) {
        final Player player = tracker.getPlayer();
        final Set<UUID> activeObjectiveUUIDs = player.getPlayerConfigData().getActiveObjectiveUUIDs();
        if (activeObjectiveUUIDs.isEmpty()) {
            return;
        }
        final UUID playerUUID = player.getUuid();
        final ObjectiveDataStore objectiveDataStore = ObjectivePlugin.get().getObjectiveDataStore();
        for (final UUID objectiveUUID : activeObjectiveUUIDs) {
            final Objective objective = objectiveDataStore.getObjective(objectiveUUID);
            if (objective == null) {
                continue;
            }
            if (!objective.getActivePlayerUUIDs().contains(playerUUID)) {
                continue;
            }
            final ObjectiveTask[] tasks = objective.getCurrentTasks();
            if (tasks == null) {
                continue;
            }
            for (final ObjectiveTask task : tasks) {
                for (final MapMarker marker : task.getMarkers()) {
                    tracker.trySendMarker(chunkViewRadius, playerChunkX, playerChunkZ, marker);
                }
            }
        }
    }
    
    static {
        INSTANCE = new ObjectiveMarkerProvider();
    }
}
