diff --git a/Plugins/Mineplex.ReportServer/pom.xml b/Plugins/Mineplex.ReportServer/pom.xml
deleted file mode 100644
index ccf6c8606..000000000
--- a/Plugins/Mineplex.ReportServer/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
- 4.0.0
-
-
- com.mineplex
- mineplex-app
- dev-SNAPSHOT
- ../app.xml
-
-
- ReportServer
- mineplex-reportserver
-
-
-
- com.google.code.gson
- gson
-
-
- redis.clients
- jedis
-
-
- org.apache.commons
- commons-pool2
- 2.4.2
-
-
- commons-cli
- commons-cli
- 1.3.1
-
-
- org.apache.commons
- commons-lang3
- 3.4
-
-
- com.mineplex
- mineplex-serverdata
- ${project.version}
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- mineplex.reportserver.ReportServer
-
-
-
-
-
-
-
diff --git a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/FilePurger.java b/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/FilePurger.java
deleted file mode 100644
index 7d61e3b26..000000000
--- a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/FilePurger.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package mineplex.reportserver;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.util.concurrent.TimeUnit;
-import java.util.logging.Logger;
-
-import org.apache.commons.lang3.Validate;
-
-/**
- * Class responsible for deleting old files (file age is determined by the "last modified" value).
- */
-public class FilePurger implements Runnable
-{
- private static final FileFilter FILE_FILTER = file -> file.isFile() && file.getName().endsWith(".json");
-
- private final File _dataDir;
- private final Logger _logger;
-
- public FilePurger(File dataDir, Logger logger)
- {
- _dataDir = dataDir;
- _logger = logger;
-
- Validate.notNull(_dataDir, "Data directory cannot be null.");
- Validate.isTrue(_dataDir.exists() && dataDir.isDirectory(), "Path non-existent or not a directory: %s", _dataDir.getAbsolutePath());
- Validate.notNull(_logger, "Logger cannot be null.");
- }
-
- @Override
- public void run()
- {
- int purgeCount = 0;
-
- for (File file : _dataDir.listFiles(FILE_FILTER))
- {
- long lastModified = file.lastModified();
- long timeSince = System.currentTimeMillis() - lastModified;
- int days = (int) TimeUnit.MILLISECONDS.toDays(timeSince);
-
- if (days >= 15) // keep files for 15 days
- {
- if (!file.delete())
- {
- _logger.warning("Cannot delete file: " + file.getAbsolutePath());
- }
- else
- {
- purgeCount++;
- }
- }
- }
-
- _logger.info("Purged " + purgeCount + " old chat snapshots.");
- }
-}
-
diff --git a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisCommandHandler.java b/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisCommandHandler.java
deleted file mode 100644
index 6afe71a6a..000000000
--- a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisCommandHandler.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package mineplex.reportserver;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.nio.file.Files;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import org.apache.commons.lang3.Validate;
-import redis.clients.jedis.JedisPubSub;
-
-/**
- * Listens for commands from Redis (such as "deploy" or "destroy") and executes them.
- */
-public class RedisCommandHandler extends JedisPubSub
-{
- private static final Gson _gson = new GsonBuilder()
- .setPrettyPrinting()
- .create();
-
- private static final JsonParser _jsonParser = new JsonParser();
-
- private final File _directory;
- private final Logger _logger;
-
- private final ExecutorService _executorService = Executors.newCachedThreadPool();
-
- public RedisCommandHandler(File directory, Logger logger)
- {
- _directory = directory;
- _logger = logger;
-
- Validate.notNull(_directory, "Directory cannot be null.");
- Validate.isTrue(directory.exists() && directory.isDirectory(), "Path non-existent or not a directory: %s", directory.getPath());
- Validate.notNull(_logger, "Logger cannot be null.");
- }
-
- @Override
- public void onMessage(String channel, String dataString)
- {
- try
- {
- if (channel.equals(ReportServer.CHANNEL_DEPLOY))
- {
- String json = dataString;
- JsonObject jsonObject = _jsonParser.parse(json).getAsJsonObject();
- String token = jsonObject.get("token").getAsString();
-
- File target = new File(_directory, token + ".json");
- _logger.info("Chat snapshot received [" + token + "], writing to file.");
-
- if (target.exists() && !jsonObject.has("snapshots"))
- {
- try (BufferedReader bufferedReader = new BufferedReader(new FileReader(target)))
- {
- JsonObject originalJsonObject = _jsonParser.parse(bufferedReader).getAsJsonObject();
- JsonObject usernamesObject = jsonObject.get("usernames").getAsJsonObject();
-
- // retrieve snapshots from original file and add to jsonObject
- jsonObject.add("snapshots", originalJsonObject.get("snapshots").getAsJsonArray());
-
- // add new UUID->Usernames, update existing usernames
- for (Map.Entry entry : originalJsonObject.get("usernames").getAsJsonObject().entrySet())
- {
- usernamesObject.addProperty(entry.getKey(), entry.getValue().getAsJsonPrimitive().getAsString());
- }
-
- // re-write json after updating
- json = _gson.toJson(jsonObject);
- }
- catch (Exception e)
- {
- _logger.log(Level.SEVERE, "Exception whilst updating an original snapshot.", e);
- }
- }
-
-
- writeFile(target, json);
- }
- else if (channel.equals(ReportServer.CHANNEL_DESTROY))
- {
- // dataString = token
- File target = new File(_directory, dataString + ".json");
- _logger.info("Destroy command received [" + dataString + "].");
-
- if (target.exists() && !target.delete())
- {
- _logger.warning("Failed to delete: " + target.getPath());
- }
- }
- }
- catch (Exception e)
- {
- _logger.log(Level.SEVERE, "Error whilst receiving redis message.", e);
- }
- }
-
- private void writeFile(File file, String json)
- {
- _executorService.submit(() -> Files.write(file.toPath(), Arrays.asList(json.split("\n"))));
- }
-
- @Override
- public void onPMessage(String s, String s1, String s2)
- {
-
- }
-
- @Override
- public void onSubscribe(String s, int i)
- {
-
- }
-
- @Override
- public void onUnsubscribe(String s, int i)
- {
-
- }
-
- @Override
- public void onPUnsubscribe(String s, int i)
- {
-
- }
-
- @Override
- public void onPSubscribe(String s, int i)
- {
-
- }
-}
diff --git a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisConnectionHandler.java b/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisConnectionHandler.java
deleted file mode 100644
index ac4c2fa42..000000000
--- a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/RedisConnectionHandler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package mineplex.reportserver;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.commons.lang3.Validate;
-import org.apache.commons.lang3.time.DurationFormatUtils;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPool;
-
-/**
- * Establishes and maintains a connection to Redis.
- */
-public class RedisConnectionHandler implements Runnable
-{
- private final String _name;
- private final JedisPool _jedisPool;
- private final RedisCommandHandler _handler;
- private final String[] _channels;
- private final Logger _logger;
-
- private long _lastConnectionMillis = -1;
- private Throwable _lastThrowable = null;
-
- public RedisConnectionHandler(String name, JedisPool jedisPool, RedisCommandHandler handler, String[] channels, Logger logger)
- {
- _name = name;
- _jedisPool = jedisPool;
- _handler = handler;
- _channels = channels;
- _logger = logger;
-
- Validate.isTrue(channels.length > 0, "Must provide at least one channel.");
- }
-
- @Override
- public void run()
- {
- while (!Thread.interrupted())
- {
- try
- {
- registerChannelHandlers();
- }
- catch (Throwable e)
- {
- // Only log new errors (prevents same error being spammed)
- if (_lastThrowable == null || !e.getClass().equals(_lastThrowable.getClass()))
- {
- if (_lastThrowable == null) // connection just failed
- {
- _lastConnectionMillis = System.currentTimeMillis();
- }
-
- _logger.log(Level.SEVERE, prefixMessage(
- "Exception in Redis connection"
- + (_lastConnectionMillis != -1 ? " (no connection for " + getLastConnectionDuration() + ")" : "")
- + ", attempting to regain connection."
- ), e);
-
- _lastThrowable = e;
- }
-
- try
- {
- Thread.sleep(1000 * 5);
- }
- catch (InterruptedException ignored) {}
- }
- }
-
- _jedisPool.destroy();
- _logger.warning("Thread interrupted, end of connection.");
- }
-
- private void registerChannelHandlers()
- {
- try (Jedis jedis = _jedisPool.getResource())
- {
- connectionEstablished();
- jedis.subscribe(_handler, _channels);
- }
- }
-
- private void connectionEstablished()
- {
- // subscribe blocks so we need to do all this before
- _logger.info(
- _lastThrowable == null
- ? prefixMessage("Connected.")
- : prefixMessage(String.format("Connected after %s.", getLastConnectionDuration()))
- );
-
- _lastThrowable = null;
- }
-
- private String prefixMessage(String message)
- {
- return String.format("[%s] %s", _name, message);
- }
-
- private String getLastConnectionDuration()
- {
- return DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - _lastConnectionMillis, true, true);
- }
-}
diff --git a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/ReportServer.java b/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/ReportServer.java
deleted file mode 100644
index 2c101107a..000000000
--- a/Plugins/Mineplex.ReportServer/src/mineplex/reportserver/ReportServer.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package mineplex.reportserver;
-
-import java.io.File;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import mineplex.serverdata.Utility;
-import mineplex.serverdata.redis.RedisConfig;
-import mineplex.serverdata.servers.ConnectionData;
-import mineplex.serverdata.servers.ServerManager;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.lang3.Validate;
-import redis.clients.jedis.JedisPool;
-
-/**
- * Main class for the Report server, parses command line arguments and initializes the Report server.
- */
-public class ReportServer
-{
- public static final String CHANNEL_DEPLOY = "reportserver:deploy";
- public static final String CHANNEL_DESTROY = "reportserver:destroy";
-
- private static final String[] CHANNELS = new String[]{CHANNEL_DEPLOY, CHANNEL_DESTROY};
-
- public static void main(String[] args)
- {
- System.setProperty("java.util.logging.SimpleFormatter.format", "%4$s: %5$s%6$s%n"); // Nicer log output
-
- Logger logger = Logger.getLogger("ReportServer");
- logger.info("Starting report server.");
-
- Options options = new Options();
-
- Option dirOption = Option.builder("dataDir")
- .hasArg()
- .longOpt("dataDirectory")
- .desc("Sets the data directory where the JSON files will be stored.")
- .type(File.class)
- .build();
-
- options.addOption(dirOption);
-
- try
- {
- CommandLineParser parser = new DefaultParser();
- CommandLine cmd = parser.parse(options, args);
- File dataDirectory = (File) cmd.getParsedOptionValue(dirOption.getOpt());
-
- if (dataDirectory == null)
- {
- dataDirectory = new File("data");
- }
-
- new ReportServer(ServerManager.getDefaultConfig(), dataDirectory, logger);
- }
- catch (ParseException e)
- {
- logger.log(Level.SEVERE, "Failed to parse arguments.", e);
- }
- }
-
- private final File _dataDirectory;
- private final Logger _logger;
-
- private final RedisCommandHandler _handler;
- private final ScheduledExecutorService _executorService = Executors.newScheduledThreadPool(1);
-
- public ReportServer(RedisConfig redisConfig, File dataDirectory, Logger logger)
- {
- _dataDirectory = dataDirectory;
- _logger = logger;
-
- Validate.notNull(_dataDirectory, "Data directory cannot be null.");
-
- // thrown if path exists but is not a directory
- Validate.isTrue(!_dataDirectory.exists() || _dataDirectory.isDirectory(), "Not a directory: %s", _dataDirectory.getPath());
-
- // throws if directory doesn't exist and cannot be created
- Validate.isTrue(_dataDirectory.exists() || _dataDirectory.mkdir(), "Unable to create directory: " + _dataDirectory.getPath());
-
- _handler = new RedisCommandHandler(_dataDirectory, _logger);
- initializeConnectionsConfig(redisConfig);
- schedulePurgeTask();
- }
-
- private void initializeConnectionsConfig(RedisConfig redisConfig)
- {
- redisConfig.getConnections(false, null).forEach(this::initializeConnection);
- }
-
- private void initializeConnection(ConnectionData connectionData)
- {
- JedisPool jedisPool = Utility.generatePool(connectionData);
- String connectionName = connectionData.getName();
- Thread thread = new Thread(new RedisConnectionHandler(connectionName, jedisPool, _handler, CHANNELS, _logger), connectionName + " - Redis PubSub Thread");
- thread.setDaemon(true);
- thread.start();
- }
-
- private void schedulePurgeTask()
- {
- _executorService.scheduleAtFixedRate(new FilePurger(_dataDirectory, _logger), 0, 30, TimeUnit.MINUTES);
- }
-}
diff --git a/Plugins/Mineplex.ReportServer/web/css/Minecraftia.ttf b/Plugins/Mineplex.ReportSite/css/Minecraftia.ttf
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/Minecraftia.ttf
rename to Plugins/Mineplex.ReportSite/css/Minecraftia.ttf
diff --git a/Plugins/Mineplex.ReportServer/web/css/bootstrap.css b/Plugins/Mineplex.ReportSite/css/bootstrap.css
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/bootstrap.css
rename to Plugins/Mineplex.ReportSite/css/bootstrap.css
diff --git a/Plugins/Mineplex.ReportServer/web/css/bootstrap.css.map b/Plugins/Mineplex.ReportSite/css/bootstrap.css.map
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/bootstrap.css.map
rename to Plugins/Mineplex.ReportSite/css/bootstrap.css.map
diff --git a/Plugins/Mineplex.ReportServer/web/css/bootstrap.min.css b/Plugins/Mineplex.ReportSite/css/bootstrap.min.css
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/bootstrap.min.css
rename to Plugins/Mineplex.ReportSite/css/bootstrap.min.css
diff --git a/Plugins/Mineplex.ReportServer/web/css/bootstrap.min.css.map b/Plugins/Mineplex.ReportSite/css/bootstrap.min.css.map
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/bootstrap.min.css.map
rename to Plugins/Mineplex.ReportSite/css/bootstrap.min.css.map
diff --git a/Plugins/Mineplex.ReportServer/web/css/tiger.css b/Plugins/Mineplex.ReportSite/css/tiger.css
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/css/tiger.css
rename to Plugins/Mineplex.ReportSite/css/tiger.css
diff --git a/Plugins/Mineplex.ReportServer/web/img/bg.png b/Plugins/Mineplex.ReportSite/img/bg.png
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/img/bg.png
rename to Plugins/Mineplex.ReportSite/img/bg.png
diff --git a/Plugins/Mineplex.ReportServer/web/img/bg.psd b/Plugins/Mineplex.ReportSite/img/bg.psd
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/img/bg.psd
rename to Plugins/Mineplex.ReportSite/img/bg.psd
diff --git a/Plugins/Mineplex.ReportServer/web/img/logo-full.png b/Plugins/Mineplex.ReportSite/img/logo-full.png
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/img/logo-full.png
rename to Plugins/Mineplex.ReportSite/img/logo-full.png
diff --git a/Plugins/Mineplex.ReportServer/web/img/logo.png b/Plugins/Mineplex.ReportSite/img/logo.png
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/img/logo.png
rename to Plugins/Mineplex.ReportSite/img/logo.png
diff --git a/Plugins/Mineplex.ReportServer/web/img/shaun.gif b/Plugins/Mineplex.ReportSite/img/shaun.gif
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/img/shaun.gif
rename to Plugins/Mineplex.ReportSite/img/shaun.gif
diff --git a/Plugins/Mineplex.ReportServer/web/js/bootstrap.js b/Plugins/Mineplex.ReportSite/js/bootstrap.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/bootstrap.js
rename to Plugins/Mineplex.ReportSite/js/bootstrap.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/bootstrap.min.js b/Plugins/Mineplex.ReportSite/js/bootstrap.min.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/bootstrap.min.js
rename to Plugins/Mineplex.ReportSite/js/bootstrap.min.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/jquery.js b/Plugins/Mineplex.ReportSite/js/jquery.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/jquery.js
rename to Plugins/Mineplex.ReportSite/js/jquery.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/npm.js b/Plugins/Mineplex.ReportSite/js/npm.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/npm.js
rename to Plugins/Mineplex.ReportSite/js/npm.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/alert.js b/Plugins/Mineplex.ReportSite/js/umd/alert.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/alert.js
rename to Plugins/Mineplex.ReportSite/js/umd/alert.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/button.js b/Plugins/Mineplex.ReportSite/js/umd/button.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/button.js
rename to Plugins/Mineplex.ReportSite/js/umd/button.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/carousel.js b/Plugins/Mineplex.ReportSite/js/umd/carousel.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/carousel.js
rename to Plugins/Mineplex.ReportSite/js/umd/carousel.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/collapse.js b/Plugins/Mineplex.ReportSite/js/umd/collapse.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/collapse.js
rename to Plugins/Mineplex.ReportSite/js/umd/collapse.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/dropdown.js b/Plugins/Mineplex.ReportSite/js/umd/dropdown.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/dropdown.js
rename to Plugins/Mineplex.ReportSite/js/umd/dropdown.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/modal.js b/Plugins/Mineplex.ReportSite/js/umd/modal.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/modal.js
rename to Plugins/Mineplex.ReportSite/js/umd/modal.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/popover.js b/Plugins/Mineplex.ReportSite/js/umd/popover.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/popover.js
rename to Plugins/Mineplex.ReportSite/js/umd/popover.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/scrollspy.js b/Plugins/Mineplex.ReportSite/js/umd/scrollspy.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/scrollspy.js
rename to Plugins/Mineplex.ReportSite/js/umd/scrollspy.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/tab.js b/Plugins/Mineplex.ReportSite/js/umd/tab.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/tab.js
rename to Plugins/Mineplex.ReportSite/js/umd/tab.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/tooltip.js b/Plugins/Mineplex.ReportSite/js/umd/tooltip.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/tooltip.js
rename to Plugins/Mineplex.ReportSite/js/umd/tooltip.js
diff --git a/Plugins/Mineplex.ReportServer/web/js/umd/util.js b/Plugins/Mineplex.ReportSite/js/umd/util.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/js/umd/util.js
rename to Plugins/Mineplex.ReportSite/js/umd/util.js
diff --git a/Plugins/Mineplex.ReportServer/web/main.js b/Plugins/Mineplex.ReportSite/main.js
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/main.js
rename to Plugins/Mineplex.ReportSite/main.js
diff --git a/Plugins/Mineplex.ReportServer/web/message.php b/Plugins/Mineplex.ReportSite/message.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/message.php
rename to Plugins/Mineplex.ReportSite/message.php
diff --git a/Plugins/Mineplex.ReportServer/web/reference.html b/Plugins/Mineplex.ReportSite/reference.html
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/reference.html
rename to Plugins/Mineplex.ReportSite/reference.html
diff --git a/Plugins/Mineplex.ReportServer/web/report.php b/Plugins/Mineplex.ReportSite/report.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/report.php
rename to Plugins/Mineplex.ReportSite/report.php
diff --git a/Plugins/Mineplex.ReportServer/web/reporter_reason.php b/Plugins/Mineplex.ReportSite/reporter_reason.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/reporter_reason.php
rename to Plugins/Mineplex.ReportSite/reporter_reason.php
diff --git a/Plugins/Mineplex.ReportServer/web/snapshot.php b/Plugins/Mineplex.ReportSite/snapshot.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/snapshot.php
rename to Plugins/Mineplex.ReportSite/snapshot.php
diff --git a/Plugins/Mineplex.ReportServer/web/user.php b/Plugins/Mineplex.ReportSite/user.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/user.php
rename to Plugins/Mineplex.ReportSite/user.php
diff --git a/Plugins/Mineplex.ReportServer/web/view.php b/Plugins/Mineplex.ReportSite/view.php
similarity index 100%
rename from Plugins/Mineplex.ReportServer/web/view.php
rename to Plugins/Mineplex.ReportSite/view.php