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

package com.hypixel.hytale.server.flock.corecomponents;

import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
import com.hypixel.hytale.server.npc.util.DamageData;
import com.hypixel.hytale.server.flock.Flock;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.server.flock.FlockPlugin;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.npc.role.Role;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderSensorBase;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.flock.corecomponents.builders.BuilderSensorFlockCombatDamage;
import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
import com.hypixel.hytale.server.npc.corecomponents.SensorBase;

public class SensorFlockCombatDamage extends SensorBase
{
    protected final boolean leaderOnly;
    protected final EntityPositionProvider positionProvider;
    
    public SensorFlockCombatDamage(@Nonnull final BuilderSensorFlockCombatDamage builder) {
        super(builder);
        this.positionProvider = new EntityPositionProvider();
        this.leaderOnly = builder.isLeaderOnly();
    }
    
    @Override
    public boolean matches(@Nonnull final Ref<EntityStore> ref, @Nonnull final Role role, final double dt, @Nonnull final Store<EntityStore> store) {
        if (!super.matches(ref, role, dt, store)) {
            this.positionProvider.clear();
            return false;
        }
        final Flock flock = FlockPlugin.getFlock(store, ref);
        if (flock == null) {
            return false;
        }
        final DamageData damageData = this.leaderOnly ? flock.getLeaderDamageData() : flock.getDamageData();
        final Ref<EntityStore> entity = damageData.getMostDamagingAttacker();
        return this.positionProvider.setTarget(entity, store) != null;
    }
    
    @Override
    public InfoProvider getSensorInfo() {
        return this.positionProvider;
    }
}
