webServer,
- PlanConfig config
- ) {
- super(serverProperties, serverInfoFile, dbSystem, webServer, config);
- }
-}
diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/Hastebin.java b/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/Hastebin.java
deleted file mode 100644
index 110d8a4e7..000000000
--- a/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/Hastebin.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * This file is part of Player Analytics (Plan).
- *
- * Plan is free software: you can redistribute it and/or modify
- * it under the terms of the LGNU Lesser General Public License v3 as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Plan is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * LGNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Plan. If not, see .
- */
-package com.djrapitops.plan.utilities.file.export;
-
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-
-import javax.net.ssl.HttpsURLConnection;
-import java.io.*;
-import java.net.URL;
-import java.util.List;
-
-/**
- * @author Fuzzlemann
- * @since 3.6.4
- */
-public class Hastebin {
-
- /**
- * Constructor used to hide the public constructor
- */
- private Hastebin() {
- throw new IllegalStateException("Utility Class");
- }
-
- /**
- * Uploads the content safely to Hastebin.
- * Longer than allowed content is being uploaded too.
- *
- * Splits the content into parts of 390.000 chars each,
- * uploads the parts in reverse order and adds the last link (if present)
- * at each end of the following part, that's why the redundancy of 10.000 chars exists.
- *
- * @return The link to the Dump Log
- * @see #split(String)
- */
- public static String safeUpload(String content) throws ParseException, IOException {
- List parts = ImmutableList.copyOf(split(content)).reverse();
-
- String lastLink = null;
- try {
- for (String part : parts) {
- if (lastLink != null) {
- part += "\n" + lastLink;
- }
-
- lastLink = upload(part);
- }
- } catch (IOException e) {
- if (e.getMessage().contains("503")) {
- return "Hastebin unavailable";
- }
- throw e;
- }
-
- return lastLink;
- }
-
- /**
- * Uploads the content to Hastebin using HTTPS and POST
- *
- * @param content The content
- * @return The link to the content
- */
- public static String upload(String content) throws IOException, ParseException {
- HttpsURLConnection connection = null;
- try {
- URL url = new URL("https://hastebin.com/documents");
- connection = (HttpsURLConnection) url.openConnection();
-
- connection.setRequestProperty("Content-length", String.valueOf(content.length()));
- connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- connection.setRequestProperty("User-Agent", "Mozilla/4.0");
- connection.setRequestMethod("POST");
- connection.setDoInput(true);
- connection.setDoOutput(true);
-
- writeData(connection.getOutputStream(), content);
-
- return getHastebinLink(connection.getInputStream());
- } finally {
- if (connection != null) {
- connection.disconnect();
- }
- }
- }
-
- /**
- * Writes the data to the {@link OutputStream}
- *
- * @param outputStream The OutputStream that the data should be written to
- * @throws IOException when an error at the writing of the data happens
- */
- private static void writeData(OutputStream outputStream, String content) throws IOException {
- try (DataOutputStream wr = new DataOutputStream(outputStream)) {
- wr.writeBytes(content);
- }
- }
-
- /**
- * Gets the Hastebin Link from the {@link InputStream}
- *
- * @param inputStream The InputStream in which the Hastebin Key is included (encoded in JSON)
- * @return The full Hastebin Link ({@code https://hastebin.com/ + key})
- * @throws IOException when an error at the reading of the InputStream happens
- * @throws ParseException when an error at the parsing of the line that was read happens
- */
- private static String getHastebinLink(InputStream inputStream) throws IOException, ParseException {
- String key;
-
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
- JSONParser parser = new JSONParser();
- JSONObject json = (JSONObject) parser.parse(reader.readLine());
-
- key = (String) json.get("key");
- }
-
- return "https://hastebin.com/" + key;
- }
-
- /**
- * Splits the content in parts of 390.000 chars each
- *
- * @return The content that was splitted
- */
- public static Iterable split(String content) {
- return Splitter.fixedLength(390000).split(content);
- }
-}
diff --git a/Plan/src/main/resources/web/plugins/bootstrap/js/npm.js b/Plan/src/main/resources/web/plugins/bootstrap/js/npm.js
deleted file mode 100644
index bf6aa8060..000000000
--- a/Plan/src/main/resources/web/plugins/bootstrap/js/npm.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
-require('../../js/transition.js')
-require('../../js/alert.js')
-require('../../js/button.js')
-require('../../js/carousel.js')
-require('../../js/collapse.js')
-require('../../js/dropdown.js')
-require('../../js/modal.js')
-require('../../js/tooltip.js')
-require('../../js/popover.js')
-require('../../js/scrollspy.js')
-require('../../js/tab.js')
-require('../../js/affix.js')
\ No newline at end of file
diff --git a/Plan/src/main/resources/web/plugins/momentjs/ender.js b/Plan/src/main/resources/web/plugins/momentjs/ender.js
deleted file mode 100644
index 71462a770..000000000
--- a/Plan/src/main/resources/web/plugins/momentjs/ender.js
+++ /dev/null
@@ -1 +0,0 @@
-$.ender({ moment: require('moment') })
diff --git a/Plan/src/test/java/com/djrapitops/plan/utilities/export/HastebinTest.java b/Plan/src/test/java/com/djrapitops/plan/utilities/export/HastebinTest.java
deleted file mode 100644
index e38068f36..000000000
--- a/Plan/src/test/java/com/djrapitops/plan/utilities/export/HastebinTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.djrapitops.plan.utilities.export;
-
-import com.djrapitops.plan.utilities.file.export.Hastebin;
-import com.google.common.collect.Iterables;
-import org.junit.Test;
-import utilities.RandomData;
-
-import static junit.framework.TestCase.assertEquals;
-
-/**
- * @author Fuzzlemann
- */
-public class HastebinTest {
-
- @Test
- public void testSplitting() {
- Iterable parts = Hastebin.split(RandomData.randomString(500000));
-
- int expPartCount = 2;
- int partCount = Iterables.size(parts);
-
- assertEquals(expPartCount, partCount);
- }
-}
diff --git a/Plan/src/test/java/utilities/mocks/objects/MockPlayers.java b/Plan/src/test/java/utilities/mocks/objects/MockPlayers.java
deleted file mode 100644
index 1968742fe..000000000
--- a/Plan/src/test/java/utilities/mocks/objects/MockPlayers.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package utilities.mocks.objects;
-
-import org.bukkit.GameMode;
-import org.bukkit.Location;
-import org.bukkit.World;
-import org.bukkit.entity.Player;
-import org.mockito.Mockito;
-import utilities.TestConstants;
-
-import static org.mockito.Mockito.when;
-
-public class MockPlayers {
- public static Player mockPlayer() {
- Player p = Mockito.mock(Player.class);
- when(p.getGameMode()).thenReturn(GameMode.SURVIVAL);
- when(p.getUniqueId()).thenReturn(TestConstants.PLAYER_ONE_UUID);
- when(p.getFirstPlayed()).thenReturn(1234567L);
- World mockWorld = mockWorld();
- when(p.getLocation()).thenReturn(new Location(mockWorld, 0, 0, 0));
- when(p.isOp()).thenReturn(true);
- when(p.isBanned()).thenReturn(true);
- when(p.isOnline()).thenReturn(true);
- when(p.getName()).thenReturn("TestName");
- when(p.hasPermission("plan.inspect.other")).thenReturn(true);
- return p;
- }
-
- public static Player mockPlayer2() {
- Player p = Mockito.mock(Player.class);
- when(p.getGameMode()).thenReturn(GameMode.SPECTATOR);
- when(p.getUniqueId()).thenReturn(TestConstants.PLAYER_TWO_UUID);
- when(p.getFirstPlayed()).thenReturn(3423434L);
- World mockWorld = mockWorld();
- when(p.getLocation()).thenReturn(new Location(mockWorld, 1, 0, 1));
- when(p.isOp()).thenReturn(false);
- when(p.isBanned()).thenReturn(false);
- when(p.isOnline()).thenReturn(false);
- when(p.hasPermission("plan.inspect.other")).thenReturn(false);
- when(p.getName()).thenReturn("TestName2");
- return p;
- }
-
- private static World mockWorld() {
- World mockWorld = Mockito.mock(World.class);
- when(mockWorld.toString()).thenReturn("World");
- return mockWorld;
- }
-}
diff --git a/Plan/velocity/pom.xml b/Plan/velocity/pom.xml
new file mode 100644
index 000000000..cfac1010e
--- /dev/null
+++ b/Plan/velocity/pom.xml
@@ -0,0 +1,86 @@
+
+
+
+ Plan
+ com.djrapitops
+ 4.5.0-SNAPSHOT
+
+ 4.0.0
+
+ Plan-velocity
+
+
+ clean package install
+ ${project.artifactId}-${project.parent.version}
+
+
+ maven-compiler-plugin
+ 3.7.0
+
+
+
+ com.google.dagger
+ dagger-compiler
+ 2.19
+
+
+ com.velocitypowered
+ velocity-api
+ 1.0-SNAPSHOT
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.0
+
+
+ package
+
+ shade
+
+
+
+
+
+
+ com.djrapitops:AbstractPluginFramework-velocity
+
+
+ false
+
+
+
+
+
+
+
+ com.djrapitops
+ Plan-common
+ ${project.parent.version}
+ compile
+
+
+ com.djrapitops
+ Plan-common
+ ${project.parent.version}
+ test-jar
+ test
+
+
+
+ com.djrapitops
+ AbstractPluginFramework-velocity
+
+
+
+ com.velocitypowered
+ velocity-api
+ provided
+
+
+
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/PlanVelocity.java b/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocity.java
similarity index 100%
rename from Plan/src/main/java/com/djrapitops/plan/PlanVelocity.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocity.java
diff --git a/Plan/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java b/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java
similarity index 75%
rename from Plan/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java
index 482c1a0a8..54ad36191 100644
--- a/Plan/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java
@@ -17,14 +17,10 @@
package com.djrapitops.plan;
import com.djrapitops.plan.command.PlanVelocityCommand;
-import com.djrapitops.plan.modules.APFModule;
-import com.djrapitops.plan.modules.FilesModule;
-import com.djrapitops.plan.modules.SuperClassBindingModule;
-import com.djrapitops.plan.modules.SystemObjectBindingModule;
-import com.djrapitops.plan.modules.plugin.VelocityPlanModule;
-import com.djrapitops.plan.modules.proxy.ProxySuperClassBindingModule;
-import com.djrapitops.plan.modules.proxy.velocity.VelocityServerPropertiesModule;
-import com.djrapitops.plan.modules.proxy.velocity.VelocitySuperClassBindingModule;
+import com.djrapitops.plan.modules.*;
+import com.djrapitops.plan.modules.velocity.VelocityPlanModule;
+import com.djrapitops.plan.modules.velocity.VelocityServerPropertiesModule;
+import com.djrapitops.plan.modules.velocity.VelocitySuperClassBindingModule;
import com.djrapitops.plan.system.PlanSystem;
import com.djrapitops.pluginbridge.plan.PluginBridgeModule;
import dagger.BindsInstance;
@@ -41,7 +37,7 @@ import javax.inject.Singleton;
@Component(modules = {
VelocityPlanModule.class,
SuperClassBindingModule.class,
- SystemObjectBindingModule.class,
+ SystemObjectProvidingModule.class,
APFModule.class,
FilesModule.class,
ProxySuperClassBindingModule.class,
diff --git a/Plan/src/main/java/com/djrapitops/plan/command/PlanVelocityCommand.java b/Plan/velocity/src/main/java/com/djrapitops/plan/command/PlanVelocityCommand.java
similarity index 100%
rename from Plan/src/main/java/com/djrapitops/plan/command/PlanVelocityCommand.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/command/PlanVelocityCommand.java
diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/plugin/VelocityPlanModule.java b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityPlanModule.java
similarity index 74%
rename from Plan/src/main/java/com/djrapitops/plan/modules/plugin/VelocityPlanModule.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityPlanModule.java
index e690d1863..70107982c 100644
--- a/Plan/src/main/java/com/djrapitops/plan/modules/plugin/VelocityPlanModule.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityPlanModule.java
@@ -14,17 +14,16 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see .
*/
-package com.djrapitops.plan.modules.plugin;
+package com.djrapitops.plan.modules.velocity;
import com.djrapitops.plan.PlanPlugin;
import com.djrapitops.plan.PlanVelocity;
import com.djrapitops.plan.command.PlanVelocityCommand;
import com.djrapitops.plugin.command.CommandNode;
+import dagger.Binds;
import dagger.Module;
-import dagger.Provides;
import javax.inject.Named;
-import javax.inject.Singleton;
/**
* Dagger module for binding PlanVelocity instance.
@@ -32,18 +31,12 @@ import javax.inject.Singleton;
* @author Rsl1122
*/
@Module
-public class VelocityPlanModule {
+public interface VelocityPlanModule {
- @Provides
- @Singleton
- PlanPlugin providePlanPlugin(PlanVelocity plugin) {
- return plugin;
- }
+ @Binds
+ PlanPlugin providePlanPlugin(PlanVelocity plugin);
- @Provides
- @Singleton
+ @Binds
@Named("mainCommand")
- CommandNode provideMainCommand(PlanVelocityCommand command) {
- return command;
- }
+ CommandNode provideMainCommand(PlanVelocityCommand command);
}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocityServerPropertiesModule.java b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityServerPropertiesModule.java
similarity index 96%
rename from Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocityServerPropertiesModule.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityServerPropertiesModule.java
index e093ba075..4be0a7524 100644
--- a/Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocityServerPropertiesModule.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocityServerPropertiesModule.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see .
*/
-package com.djrapitops.plan.modules.proxy.velocity;
+package com.djrapitops.plan.modules.velocity;
import com.djrapitops.plan.PlanVelocity;
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
diff --git a/Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocitySuperClassBindingModule.java b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocitySuperClassBindingModule.java
similarity index 76%
rename from Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocitySuperClassBindingModule.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocitySuperClassBindingModule.java
index 60183f6b6..b34862e81 100644
--- a/Plan/src/main/java/com/djrapitops/plan/modules/proxy/velocity/VelocitySuperClassBindingModule.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/modules/velocity/VelocitySuperClassBindingModule.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see .
*/
-package com.djrapitops.plan.modules.proxy.velocity;
+package com.djrapitops.plan.modules.velocity;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.info.server.VelocityServerInfo;
@@ -22,10 +22,8 @@ import com.djrapitops.plan.system.listeners.ListenerSystem;
import com.djrapitops.plan.system.listeners.VelocityListenerSystem;
import com.djrapitops.plan.system.tasks.TaskSystem;
import com.djrapitops.plan.system.tasks.VelocityTaskSystem;
+import dagger.Binds;
import dagger.Module;
-import dagger.Provides;
-
-import javax.inject.Singleton;
/**
* Module for binding Velocity specific classes to the interface implementations.
@@ -33,23 +31,14 @@ import javax.inject.Singleton;
* @author Rsl1122
*/
@Module
-public class VelocitySuperClassBindingModule {
+public interface VelocitySuperClassBindingModule {
- @Provides
- @Singleton
- ServerInfo provideVelocityServerInfo(VelocityServerInfo velocityServerInfo) {
- return velocityServerInfo;
- }
+ @Binds
+ ServerInfo provideVelocityServerInfo(VelocityServerInfo velocityServerInfo);
- @Provides
- @Singleton
- TaskSystem provideVelocityTaskSystem(VelocityTaskSystem velocityTaskSystem) {
- return velocityTaskSystem;
- }
+ @Binds
+ TaskSystem provideVelocityTaskSystem(VelocityTaskSystem velocityTaskSystem);
- @Provides
- @Singleton
- ListenerSystem provideVelocityListenerSystem(VelocityListenerSystem velocityListenerSystem) {
- return velocityListenerSystem;
- }
+ @Binds
+ ListenerSystem provideVelocityListenerSystem(VelocityListenerSystem velocityListenerSystem);
}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/server/VelocityServerInfo.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/info/server/VelocityServerInfo.java
similarity index 100%
rename from Plan/src/main/java/com/djrapitops/plan/system/info/server/VelocityServerInfo.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/info/server/VelocityServerInfo.java
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java
similarity index 87%
rename from Plan/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java
index 8b312609e..bc3e2e9ea 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/system/info/server/properties/VelocityServerProperties.java
@@ -32,12 +32,11 @@ public class VelocityServerProperties extends ServerProperties {
server.getAllServers().toString(),
"Velocity",
server.getBoundAddress().getPort(),
- // not sure how to get these
server.getClass().getPackage().getImplementationVersion(),
server.getClass().getPackage().getImplementationVersion(),
() -> serverIP,
- -1, // not sure how to get this
- RedisCheck.isClassAvailable() ? new RedisPlayersOnlineSupplier() : server::getPlayerCount
+ -1,
+ server::getPlayerCount
);
}
}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/listeners/VelocityListenerSystem.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/VelocityListenerSystem.java
similarity index 100%
rename from Plan/src/main/java/com/djrapitops/plan/system/listeners/VelocityListenerSystem.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/VelocityListenerSystem.java
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java
similarity index 100%
rename from Plan/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/listeners/velocity/PlayerOnlineListener.java
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java
similarity index 92%
rename from Plan/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java
index 61d1c031d..992728746 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/VelocityTaskSystem.java
@@ -20,9 +20,8 @@ import com.djrapitops.plan.PlanVelocity;
import com.djrapitops.plan.system.settings.Settings;
import com.djrapitops.plan.system.settings.config.PlanConfig;
import com.djrapitops.plan.system.tasks.proxy.NetworkPageRefreshTask;
-import com.djrapitops.plan.system.tasks.proxy.bungee.PingCountTimerBungee;
-import com.djrapitops.plan.system.tasks.proxy.velocity.PingCountTimerVelocity;
-import com.djrapitops.plan.system.tasks.proxy.velocity.VelocityTPSCountTimer;
+import com.djrapitops.plan.system.tasks.velocity.PingCountTimerVelocity;
+import com.djrapitops.plan.system.tasks.velocity.VelocityTPSCountTimer;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
@@ -82,7 +81,7 @@ public class VelocityTaskSystem extends TaskSystem {
plugin.registerListener(pingCountTimer);
long startDelay = TimeAmount.toTicks(config.getNumber(Settings.PING_SERVER_ENABLE_DELAY), TimeUnit.SECONDS);
- runnableFactory.create("PingCountTimer", pingCountTimer).runTaskTimer(startDelay, PingCountTimerBungee.PING_INTERVAL);
+ runnableFactory.create("PingCountTimer", pingCountTimer).runTaskTimer(startDelay, PingCountTimerVelocity.PING_INTERVAL);
registerTask(playersPageRefreshTask)
.runTaskTimerAsynchronously(TimeAmount.toTicks(5L, TimeUnit.MINUTES), TimeAmount.toTicks(5L, TimeUnit.MINUTES));
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocity.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocity.java
similarity index 98%
rename from Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocity.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocity.java
index 58d0d535d..0639bb32f 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocity.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocity.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-package com.djrapitops.plan.system.tasks.proxy.velocity;
+package com.djrapitops.plan.system.tasks.velocity;
import com.djrapitops.plan.PlanVelocity;
import com.djrapitops.plan.data.store.objects.DateObj;
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/VelocityTPSCountTimer.java b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/VelocityTPSCountTimer.java
similarity index 97%
rename from Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/VelocityTPSCountTimer.java
rename to Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/VelocityTPSCountTimer.java
index 73f763f60..6e0e9bd7a 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/proxy/velocity/VelocityTPSCountTimer.java
+++ b/Plan/velocity/src/main/java/com/djrapitops/plan/system/tasks/velocity/VelocityTPSCountTimer.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see .
*/
-package com.djrapitops.plan.system.tasks.proxy.velocity;
+package com.djrapitops.plan.system.tasks.velocity;
import com.djrapitops.plan.data.container.TPS;
import com.djrapitops.plan.data.container.builders.TPSBuilder;
diff --git a/Plan/src/test/java/com/djrapitops/plan/VelocitySystemTest.java b/Plan/velocity/src/test/java/com/djrapitops/plan/VelocitySystemTest.java
similarity index 100%
rename from Plan/src/test/java/com/djrapitops/plan/VelocitySystemTest.java
rename to Plan/velocity/src/test/java/com/djrapitops/plan/VelocitySystemTest.java
diff --git a/Plan/src/test/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocityTest.java b/Plan/velocity/src/test/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocityTest.java
similarity index 96%
rename from Plan/src/test/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocityTest.java
rename to Plan/velocity/src/test/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocityTest.java
index e7d928771..d12f77908 100644
--- a/Plan/src/test/java/com/djrapitops/plan/system/tasks/proxy/velocity/PingCountTimerVelocityTest.java
+++ b/Plan/velocity/src/test/java/com/djrapitops/plan/system/tasks/velocity/PingCountTimerVelocityTest.java
@@ -1,4 +1,4 @@
-package com.djrapitops.plan.system.tasks.proxy.velocity;
+package com.djrapitops.plan.system.tasks.velocity;
import com.djrapitops.plan.PlanVelocity;
import com.velocitypowered.api.proxy.Player;
diff --git a/Plan/src/test/java/utilities/mocks/PlanVelocityMocker.java b/Plan/velocity/src/test/java/utilities/mocks/PlanVelocityMocker.java
similarity index 100%
rename from Plan/src/test/java/utilities/mocks/PlanVelocityMocker.java
rename to Plan/velocity/src/test/java/utilities/mocks/PlanVelocityMocker.java
diff --git a/Plan/velocity/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/Plan/velocity/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 000000000..ca6ee9cea
--- /dev/null
+++ b/Plan/velocity/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file