// Path: base/src/main/java/net/techcable/npclib/Metrics.java
// public static class Graph {
// 
//     /**
//      * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is
//      * rejected
//      */
//     private final String name;
// 
//     /**
//      * The set of plotters that are contained within this graph
//      */
//     private final Set<Plotter> plotters = new LinkedHashSet<Plotter>();
// 
//     private Graph(final String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Gets the graph's name
//      *
//      * @return the Graph's name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * Add a plotter to the graph, which will be used to plot entries
//      *
//      * @param plotter the plotter to add to the graph
//      */
//     public void addPlotter(final Plotter plotter) {
//         plotters.add(plotter);
//     }
// 
//     /**
//      * Remove a plotter from the graph
//      *
//      * @param plotter the plotter to remove from the graph
//      */
//     public void removePlotter(final Plotter plotter) {
//         plotters.remove(plotter);
//     }
// 
//     /**
//      * Gets an <b>unmodifiable</b> set of the plotter objects in the graph
//      *
//      * @return an unmodifiable {@link java.util.Set} of the plotter objects
//      */
//     public Set<Plotter> getPlotters() {
//         return Collections.unmodifiableSet(plotters);
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode();
//     }
// 
//     @Override
//     public boolean equals(final Object object) {
//         if (!(object instanceof Graph)) {
//             return false;
//         }
// 
//         final Graph graph = (Graph) object;
//         return graph.name.equals(name);
//     }
// 
//     /**
//      * Called when the server owner decides to opt-out of BukkitMetrics while the server is running.
//      */
//     protected void onOptOut() {
//     }
// }
// 
// Path: base/src/main/java/net/techcable/npclib/Metrics.java
// public static abstract class Plotter {
// 
//     /**
//      * The plot's name
//      */
//     private final String name;
// 
//     /**
//      * Construct a plotter with the default plot name
//      */
//     public Plotter() {
//         this("Default");
//     }
// 
//     /**
//      * Construct a plotter with a specific plot name
//      *
//      * @param name the name of the plotter to use, which will show up on the website
//      */
//     public Plotter(final String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Get the current value for the plotted point. Since this function defers to an external function it may or may
//      * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called
//      * from any thread so care should be taken when accessing resources that need to be synchronized.
//      *
//      * @return the current value for the point to be plotted.
//      */
//     public abstract int getValue();
// 
//     /**
//      * Get the column name for the plotted point
//      *
//      * @return the plotted point's column name
//      */
//     public String getColumnName() {
//         return name;
//     }
// 
//     /**
//      * Called after the website graphs have been updated
//      */
//     public void reset() {
//     }
// 
//     @Override
//     public int hashCode() {
//         return getColumnName().hashCode();
//     }
// 
//     @Override
//     public boolean equals(final Object object) {
//         if (!(object instanceof Plotter)) {
//             return false;
//         }
// 
//         final Plotter plotter = (Plotter) object;
//         return plotter.name.equals(name) && plotter.getValue() == getValue();
//     }
// }
// 
// Path: api/src/main/java/net/techcable/npclib/utils/NPCLog.java
// @NoArgsConstructor(access = AccessLevel.PRIVATE)
// public class NPCLog {
// 
//     public static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("npclib.debug", "false"));
// 
//     public static final String PREFIX = "NPCLib";
// 
//     public static void info(String msg) {
//         log(Level.INFO, msg);
//     }
// 
//     public static void info(String msg, Object... args) {
//         log(Level.INFO, msg, args);
//     }
// 
//     public static void warn(String msg) {
//         log(Level.WARNING, msg);
//     }
// 
//     public static void warn(String msg, Object... args) {
//         log(Level.WARNING, msg, args);
//     }
// 
//     public static void warn(String msg, Throwable t) {
//         log(Level.WARNING, msg, t);
//     }
// 
//     public static void severe(String msg, Throwable t) {
//         log(Level.SEVERE, msg, t);
//     }
// 
//     public static void debug(String msg) {
//         if (DEBUG) {
//             log(Level.INFO, msg);
//         }
//     }
// 
//     public static void debug(String msg, Throwable t) {
//         if (DEBUG) {
//             log(Level.INFO, msg, t);
//         }
//     }
// 
//     private static void log(Level level, String msg, Throwable t) {
//         Bukkit.getLogger().log(level, PREFIX + " " + msg, t);
//     }
// 
//     private static void log(Level level, String msg, Object... args) {
//         Bukkit.getLogger().log(level, String.format(msg, args));
//     }
// 
//     private static void log(Level level, String msg) {
//         Bukkit.getLogger().log(level, msg);
//     }
// }


import lombok.*;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import net.techcable.npclib.Metrics.Graph;
import net.techcable.npclib.Metrics.Plotter;
import net.techcable.npclib.utils.NPCLog;
import org.bukkit.plugin.Plugin;
package net.techcable.npclib;





@NoArgsConstructor(access = AccessLevel.NONE)
public class NPCMetrics {

    private static Metrics metrics;
// Path: base/src/main/java/net/techcable/npclib/Metrics.java
// public static class Graph {
// 
//     /**
//      * The graph's name, alphanumeric and spaces only :) If it does not comply to the above when submitted, it is
//      * rejected
//      */
//     private final String name;
// 
//     /**
//      * The set of plotters that are contained within this graph
//      */
//     private final Set<Plotter> plotters = new LinkedHashSet<Plotter>();
// 
//     private Graph(final String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Gets the graph's name
//      *
//      * @return the Graph's name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * Add a plotter to the graph, which will be used to plot entries
//      *
//      * @param plotter the plotter to add to the graph
//      */
//     public void addPlotter(final Plotter plotter) {
//         plotters.add(plotter);
//     }
// 
//     /**
//      * Remove a plotter from the graph
//      *
//      * @param plotter the plotter to remove from the graph
//      */
//     public void removePlotter(final Plotter plotter) {
//         plotters.remove(plotter);
//     }
// 
//     /**
//      * Gets an <b>unmodifiable</b> set of the plotter objects in the graph
//      *
//      * @return an unmodifiable {@link java.util.Set} of the plotter objects
//      */
//     public Set<Plotter> getPlotters() {
//         return Collections.unmodifiableSet(plotters);
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode();
//     }
// 
//     @Override
//     public boolean equals(final Object object) {
//         if (!(object instanceof Graph)) {
//             return false;
//         }
// 
//         final Graph graph = (Graph) object;
//         return graph.name.equals(name);
//     }
// 
//     /**
//      * Called when the server owner decides to opt-out of BukkitMetrics while the server is running.
//      */
//     protected void onOptOut() {
//     }
// }
// 
// Path: base/src/main/java/net/techcable/npclib/Metrics.java
// public static abstract class Plotter {
// 
//     /**
//      * The plot's name
//      */
//     private final String name;
// 
//     /**
//      * Construct a plotter with the default plot name
//      */
//     public Plotter() {
//         this("Default");
//     }
// 
//     /**
//      * Construct a plotter with a specific plot name
//      *
//      * @param name the name of the plotter to use, which will show up on the website
//      */
//     public Plotter(final String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Get the current value for the plotted point. Since this function defers to an external function it may or may
//      * not return immediately thus cannot be guaranteed to be thread friendly or safe. This function can be called
//      * from any thread so care should be taken when accessing resources that need to be synchronized.
//      *
//      * @return the current value for the point to be plotted.
//      */
//     public abstract int getValue();
// 
//     /**
//      * Get the column name for the plotted point
//      *
//      * @return the plotted point's column name
//      */
//     public String getColumnName() {
//         return name;
//     }
// 
//     /**
//      * Called after the website graphs have been updated
//      */
//     public void reset() {
//     }
// 
//     @Override
//     public int hashCode() {
//         return getColumnName().hashCode();
//     }
// 
//     @Override
//     public boolean equals(final Object object) {
//         if (!(object instanceof Plotter)) {
//             return false;
//         }
// 
//         final Plotter plotter = (Plotter) object;
//         return plotter.name.equals(name) && plotter.getValue() == getValue();
//     }
// }
// 
// Path: api/src/main/java/net/techcable/npclib/utils/NPCLog.java
// @NoArgsConstructor(access = AccessLevel.PRIVATE)
// public class NPCLog {
// 
//     public static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("npclib.debug", "false"));
// 
//     public static final String PREFIX = "NPCLib";
// 
//     public static void info(String msg) {
//         log(Level.INFO, msg);
//     }
// 
//     public static void info(String msg, Object... args) {
//         log(Level.INFO, msg, args);
//     }
// 
//     public static void warn(String msg) {
//         log(Level.WARNING, msg);
//     }
// 
//     public static void warn(String msg, Object... args) {
//         log(Level.WARNING, msg, args);
//     }
// 
//     public static void warn(String msg, Throwable t) {
//         log(Level.WARNING, msg, t);
//     }
// 
//     public static void severe(String msg, Throwable t) {
//         log(Level.SEVERE, msg, t);
//     }
// 
//     public static void debug(String msg) {
//         if (DEBUG) {
//             log(Level.INFO, msg);
//         }
//     }
// 
//     public static void debug(String msg, Throwable t) {
//         if (DEBUG) {
//             log(Level.INFO, msg, t);
//         }
//     }
// 
//     private static void log(Level level, String msg, Throwable t) {
//         Bukkit.getLogger().log(level, PREFIX + " " + msg, t);
//     }
// 
//     private static void log(Level level, String msg, Object... args) {
//         Bukkit.getLogger().log(level, String.format(msg, args));
//     }
// 
//     private static void log(Level level, String msg) {
//         Bukkit.getLogger().log(level, msg);
//     }
// }


// Path: base/src/main/java/net/techcable/npclib/NPCMetrics.java
import lombok.*;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import net.techcable.npclib.Metrics.Graph;
import net.techcable.npclib.Metrics.Plotter;
import net.techcable.npclib.utils.NPCLog;
import org.bukkit.plugin.Plugin;

package net.techcable.npclib;





@NoArgsConstructor(access = AccessLevel.NONE)
public class NPCMetrics {

    private static Metrics metrics;
    private static Graph graph;