// Path: src/main/java/com/gamerforea/eventhelper/EventHelperMod.java
// @Mod(modid = MODID, name = NAME, version = VERSION, acceptableRemoteVersions = "*")
// public final class EventHelperMod
// {
// 	public static final File CFG_DIR = new File(Loader.instance().getConfigDir(), "Events");
// 	public static final Logger LOGGER = LogManager.getLogger(NAME);
// 
// 	@ConfigBoolean(comment = "Enable debugging messages")
// 	public static boolean debug = true;
// 
// 	@Nonnull
// 	@ConfigEnum(comment = "Default API for integration (AUTO, SPONGE, BUKKIT)")
// 	public static IntegrationType integrationType = IntegrationType.AUTO;
// 
// 	@Nonnull
// 	@ConfigEnum(comment = "Policy for recursive protection checks with same parameters (prevent Sponge-Forge events conversion stack overflow) (IGNORE, FORCE_ALLOW, FORCE_DENY)")
// 	public static RecursionProtectionPolicy recursionProtectionPolicy = RecursionProtectionPolicy.FORCE_DENY;
// 
// 	@ConfigBoolean(comment = "Print warning in case of recursive protection checks with same parameters")
// 	public static boolean recursionProtectionWarning = true;
// 
// 	@ConfigBoolean(comment = "Prevent Sponge-Forge events conversion stack overflow")
// 	public static boolean preventSponge2ForgeEventConversion = true;
// 
// 	@ConfigBoolean(comment = "Enable additional checks to grief prevention (may be needed for Bukkit)")
// 	public static boolean paranoidProtection = false;
// 
// 	@EventHandler
// 	public void preInit(FMLPreInitializationEvent event)
// 	{
// 		ConfigUtils.readConfig(this.getClass(), NAME);
// 	}
// 
// 	@EventHandler
// 	public void serverStart(FMLServerStartingEvent event)
// 	{
// 		event.registerServerCommand(new CommandReloadAllConfigs());
// 	}
// }


import com.gamerforea.eventhelper.EventHelperMod;
import com.google.common.base.Preconditions;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.stream.Collectors;
		return this.classes.iterator();
	}

	public void clear()
	{
		this.classes.clear();
	}

	public boolean add(@Nonnull Class<? extends T> clazz)
	{
		return this.baseClass.isAssignableFrom(clazz) && this.classes.add(clazz);
	}

	public void addRaw(@Nonnull Collection<String> classNames)
	{
		classNames.forEach(this::addRaw);
	}

	public void addRaw(@Nonnull String className)
	{
		try
		{
			Class<?> clazz = Class.forName(className);
			if (this.baseClass.isAssignableFrom(clazz))
				this.add((Class<? extends T>) clazz);
			else if (EventHelperMod.debug)
				EventHelperMod.LOGGER.warn("Class {} is not assignable from {}", className, this.baseClass.getName());
		}
		catch (ClassNotFoundException e)
		{
// Path: src/main/java/com/gamerforea/eventhelper/EventHelperMod.java
// @Mod(modid = MODID, name = NAME, version = VERSION, acceptableRemoteVersions = "*")
// public final class EventHelperMod
// {
// 	public static final File CFG_DIR = new File(Loader.instance().getConfigDir(), "Events");
// 	public static final Logger LOGGER = LogManager.getLogger(NAME);
// 
// 	@ConfigBoolean(comment = "Enable debugging messages")
// 	public static boolean debug = true;
// 
// 	@Nonnull
// 	@ConfigEnum(comment = "Default API for integration (AUTO, SPONGE, BUKKIT)")
// 	public static IntegrationType integrationType = IntegrationType.AUTO;
// 
// 	@Nonnull
// 	@ConfigEnum(comment = "Policy for recursive protection checks with same parameters (prevent Sponge-Forge events conversion stack overflow) (IGNORE, FORCE_ALLOW, FORCE_DENY)")
// 	public static RecursionProtectionPolicy recursionProtectionPolicy = RecursionProtectionPolicy.FORCE_DENY;
// 
// 	@ConfigBoolean(comment = "Print warning in case of recursive protection checks with same parameters")
// 	public static boolean recursionProtectionWarning = true;
// 
// 	@ConfigBoolean(comment = "Prevent Sponge-Forge events conversion stack overflow")
// 	public static boolean preventSponge2ForgeEventConversion = true;
// 
// 	@ConfigBoolean(comment = "Enable additional checks to grief prevention (may be needed for Bukkit)")
// 	public static boolean paranoidProtection = false;
// 
// 	@EventHandler
// 	public void preInit(FMLPreInitializationEvent event)
// 	{
// 		ConfigUtils.readConfig(this.getClass(), NAME);
// 	}
// 
// 	@EventHandler
// 	public void serverStart(FMLServerStartingEvent event)
// 	{
// 		event.registerServerCommand(new CommandReloadAllConfigs());
// 	}
// }


// Path: src/main/java/com/gamerforea/eventhelper/config/ClassSet.java
import com.gamerforea.eventhelper.EventHelperMod;
import com.google.common.base.Preconditions;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.stream.Collectors;

		return this.classes.iterator();
	}

	public void clear()
	{
		this.classes.clear();
	}

	public boolean add(@Nonnull Class<? extends T> clazz)
	{
		return this.baseClass.isAssignableFrom(clazz) && this.classes.add(clazz);
	}

	public void addRaw(@Nonnull Collection<String> classNames)
	{
		classNames.forEach(this::addRaw);
	}

	public void addRaw(@Nonnull String className)
	{
		try
		{
			Class<?> clazz = Class.forName(className);
			if (this.baseClass.isAssignableFrom(clazz))
				this.add((Class<? extends T>) clazz);
			else if (EventHelperMod.debug)
				EventHelperMod.LOGGER.warn("Class {} is not assignable from {}", className, this.baseClass.getName());
		}
		catch (ClassNotFoundException e)
		{
			if (EventHelperMod.debug)