package com.publicuhc.scatter.logic;

import com.publicuhc.scatter.ScatterParameters;
import com.publicuhc.scatter.exceptions.ScatterConfigurationException;
import com.publicuhc.scatter.exceptions.ScatterLocationException;
import com.publicuhc.scatter.zones.DeadZone;
import org.bukkit.Location;

import java.util.List;

public interface ScatterLogic {

    /**
     * Get a list of valid scatter locations
     * @param deadZones the list of zones for which spawning should be disallowed
     * @return a valid location
     * @throws com.publicuhc.scatter.exceptions.ScatterLocationException on being not able to get a valid location
     * @throws com.publicuhc.scatter.exceptions.ScatterConfigurationException if needed parameters in ScatterParameters are missing
     */
    List<Location> getScatterLocation(List<DeadZone> deadZones, ScatterParameters parameters) throws ScatterLocationException, ScatterConfigurationException;

    /**
     * @return the unique name of the scatter logic
     */
    String getID();

    /**
     * @return a short description of how we scatter
     */
    String getDescription();
}

@@ -317,40 +317,245 @@
 st;%0A
-%0Apublic interface ScatterLogic %7B
+import java.util.Random;%0A%0Apublic abstract class ScatterLogic %7B%0A%0A    private final Random m_random;%0A%0A    public ScatterLogic(Random random) %7B%0A        m_random = random;%0A    %7D%0A%0A    public Random getRandom() %7B%0A        return m_random;%0A    %7D
 %0A%0A  
@@ -978,16 +978,32 @@
  */%0A    
+public abstract 
 List%3CLoc
@@ -1213,32 +1213,48 @@
 gic%0A     */%0A    
+public abstract 
 String getID();%0A
@@ -1327,16 +1327,32 @@
  */%0A    
+public abstract 
 String g

change scatter logic to abstract and require a random