// Path: src/main/java/tc/oc/tracker/Tracker.java
// public interface Tracker {
//     /**
//      * Indicates whether the tracker is enabled and collecting data in the
//      * specified world.
//      *
//      * @param world Specified world
//      * @return true if the tracker is enabled in the world, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean isEnabled(@Nonnull World world);
// 
//     /**
//      * Enables the tracker in all current and future worlds.
//      *
//      * @return true if one or more worlds that were not enabled are now
//      *         enabled, false otherwise
//      */
//     boolean enable();
// 
//     /**
//      * Enables the tracker in the specified world.
//      *
//      * @param world Specified world
//      * @return true if the world was disabled, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean enable(@Nonnull World world);
// 
//     /**
//      * Disables the tracker in all current and future worlds.
//      *
//      * Note that any data that was tracked will be discarded.
//      *
//      * @return true if one or more worlds that were enabled are now disabled,
//      *         false otherwise
//      */
//     boolean disable();
// 
//     /**
//      * Disables the tracker in the specified world.
//      *
//      * Note that any data that was tracked will be discarded.
//      *
//      * @param world Specified world
//      * @return true if the world was enabled, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean disable(@Nonnull World world);
// 
//     /**
//      * Clears stored information regarding the specified world.
//      *
//      * @param world Specified world
//      *
//      * @throws NullPointerException if world is null
//      */
//     void clear(@Nonnull World world);
// }
// 
// Path: src/main/java/tc/oc/tracker/TrackerManager.java
// public interface TrackerManager {
//     Set<Tracker> getTrackers();
// 
//     boolean hasTracker(@Nonnull Class<? extends Tracker> trackerClass);
// 
//     @Nullable <T extends Tracker> T getTracker(@Nonnull Class<T> trackerClass);
// 
//     @Nullable <T extends Tracker> T setTracker(@Nonnull Class<T> trackerClass, @Nullable T tracker);
// 
//     @Nullable <T extends Tracker> T clearTracker(@Nonnull Class<T> trackerClass);
// 
//     @Nullable <T extends Tracker> T clearTracker(@Nonnull Class<T> trackerClass, @Nonnull Class<? extends T> trackerImplClass);
// 
//     void clearTrackers(@Nonnull World world);
// }


import javax.annotation.Nonnull;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldUnloadEvent;
import tc.oc.tracker.Tracker;
import tc.oc.tracker.TrackerManager;
import com.google.common.base.Preconditions;
package tc.oc.tracker.plugin;





public class WorldListener implements Listener {
    private final @Nonnull TrackerManager manager;

    public WorldListener(@Nonnull TrackerManager manager) {
        Preconditions.checkNotNull(manager, "tracker manager");

        this.manager = manager;
    }

    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onWorldUnload(final WorldUnloadEvent event) {
// Path: src/main/java/tc/oc/tracker/Tracker.java
// public interface Tracker {
//     /**
//      * Indicates whether the tracker is enabled and collecting data in the
//      * specified world.
//      *
//      * @param world Specified world
//      * @return true if the tracker is enabled in the world, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean isEnabled(@Nonnull World world);
// 
//     /**
//      * Enables the tracker in all current and future worlds.
//      *
//      * @return true if one or more worlds that were not enabled are now
//      *         enabled, false otherwise
//      */
//     boolean enable();
// 
//     /**
//      * Enables the tracker in the specified world.
//      *
//      * @param world Specified world
//      * @return true if the world was disabled, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean enable(@Nonnull World world);
// 
//     /**
//      * Disables the tracker in all current and future worlds.
//      *
//      * Note that any data that was tracked will be discarded.
//      *
//      * @return true if one or more worlds that were enabled are now disabled,
//      *         false otherwise
//      */
//     boolean disable();
// 
//     /**
//      * Disables the tracker in the specified world.
//      *
//      * Note that any data that was tracked will be discarded.
//      *
//      * @param world Specified world
//      * @return true if the world was enabled, false otherwise
//      *
//      * @throws NullPointerException if world is null
//      */
//     boolean disable(@Nonnull World world);
// 
//     /**
//      * Clears stored information regarding the specified world.
//      *
//      * @param world Specified world
//      *
//      * @throws NullPointerException if world is null
//      */
//     void clear(@Nonnull World world);
// }
// 
// Path: src/main/java/tc/oc/tracker/TrackerManager.java
// public interface TrackerManager {
//     Set<Tracker> getTrackers();
// 
//     boolean hasTracker(@Nonnull Class<? extends Tracker> trackerClass);
// 
//     @Nullable <T extends Tracker> T getTracker(@Nonnull Class<T> trackerClass);
// 
//     @Nullable <T extends Tracker> T setTracker(@Nonnull Class<T> trackerClass, @Nullable T tracker);
// 
//     @Nullable <T extends Tracker> T clearTracker(@Nonnull Class<T> trackerClass);
// 
//     @Nullable <T extends Tracker> T clearTracker(@Nonnull Class<T> trackerClass, @Nonnull Class<? extends T> trackerImplClass);
// 
//     void clearTrackers(@Nonnull World world);
// }


// Path: src/main/java/tc/oc/tracker/plugin/WorldListener.java
import javax.annotation.Nonnull;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldUnloadEvent;
import tc.oc.tracker.Tracker;
import tc.oc.tracker.TrackerManager;
import com.google.common.base.Preconditions;

package tc.oc.tracker.plugin;





public class WorldListener implements Listener {
    private final @Nonnull TrackerManager manager;

    public WorldListener(@Nonnull TrackerManager manager) {
        Preconditions.checkNotNull(manager, "tracker manager");

        this.manager = manager;
    }

    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onWorldUnload(final WorldUnloadEvent event) {
        for(Tracker tracker : this.manager.getTrackers()) {