package com.publicuhc.scatter;

import com.publicuhc.scatter.logic.ScatterLogic;

import java.util.List;

public interface Scatterer {

    /**
     * @param logic the logic to add to the list we can use in scatters
     */
    void addScatterLogic(ScatterLogic logic);

    /**
     * @return all of the scatter logic we know
     */
    List<ScatterLogic> getAllScatterLogic();

    /**
     * @param name the id of the logic to fetch
     * @return the scatterlogic if found, null otherwise
     */
    ScatterLogic getScatterLogic(String name);
}

package com.publicuhc.scatter;

import com.publicuhc.scatter.exceptions.ScatterLocationException;
import com.publicuhc.scatter.logic.ScatterLogic;
import com.publicuhc.scatter.zones.DeadZone;
import com.publicuhc.scatter.zones.DeadZoneBuilder;
import org.bukkit.Location;

import java.util.List;

public interface Scatterer {

    /**
     * Attempt to find safe locations
     *
     * @return list of locations outside of provided deadzones and outside of zones created by the builder
     * @throws ScatterLocationException if a location wasn't able to be fetched
     */
    List<Location> getScatterLocations(int amount) throws ScatterLocationException;

    void setLogic(ScatterLogic logic);

    ScatterLogic getLogic();

    void setDeadZoneBuilder(DeadZoneBuilder builder);

    DeadZoneBuilder getDeadZoneBuilder();

    List<DeadZone> getBaseDeadZones();

    void setBaseDeadZones(List<DeadZone> zones);

    void addBaseDeadZone(DeadZone zone);
}

improve the interface as a way to scatter instead of a logic manager