diff --git a/Sponge/pom.xml b/Sponge/pom.xml
index 36e6545..b64efd8 100644
--- a/Sponge/pom.xml
+++ b/Sponge/pom.xml
@@ -25,6 +25,12 @@
8.1.0
provided
+
+ dev.brighten.antivpn
+ Common
+ 1.8.4
+ provided
+
diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayer.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayer.java
new file mode 100644
index 0000000..9f85223
--- /dev/null
+++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayer.java
@@ -0,0 +1,31 @@
+package dev.brighten.antivpn.sponge;
+
+import dev.brighten.antivpn.api.APIPlayer;
+import dev.brighten.antivpn.sponge.util.StringUtil;
+import net.kyori.adventure.text.Component;
+import org.spongepowered.api.entity.living.player.server.ServerPlayer;
+
+public class SpongePlayer extends APIPlayer {
+
+ private final ServerPlayer player;
+
+ public SpongePlayer(ServerPlayer player) {
+ super(player.uniqueId(), player.name(), player.connection().address().getAddress());
+ this.player = player;
+ }
+
+ @Override
+ public void sendMessage(String message) {
+ player.sendMessage(StringUtil.translateColorCodes('&', message);
+ }
+
+ @Override
+ public void kickPlayer(String reason) {
+ player.kick(Component.text(StringUtil.translateColorCodes('&', reason)));
+ }
+
+ @Override
+ public boolean hasPermission(String permission) {
+ return player.hasPermission(permission);
+ }
+}
diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java
new file mode 100644
index 0000000..414d7b3
--- /dev/null
+++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlayerExecutor.java
@@ -0,0 +1,31 @@
+package dev.brighten.antivpn.sponge;
+
+import dev.brighten.antivpn.api.APIPlayer;
+import dev.brighten.antivpn.api.PlayerExecutor;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+public class SpongePlayerExecutor implements PlayerExecutor {
+ @Override
+ public Optional getPlayer(String name) {
+
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional getPlayer(UUID uuid) {
+ return Optional.empty();
+ }
+
+ @Override
+ public void unloadPlayer(UUID uuid) {
+
+ }
+
+ @Override
+ public List getOnlinePlayers() {
+ return null;
+ }
+}
diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java
index 7192463..39d9c50 100644
--- a/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java
+++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/SpongePlugin.java
@@ -1,4 +1,28 @@
package dev.brighten.antivpn.sponge;
+import com.google.inject.Inject;
+import org.spongepowered.api.Server;
+import org.spongepowered.api.event.Listener;
+import org.spongepowered.api.event.lifecycle.StartedEngineEvent;
+import org.spongepowered.plugin.builtin.jvm.Plugin;
+
+import java.util.logging.Logger;
+
+@Plugin("kaurivpn")
public class SpongePlugin {
+
+ public static SpongePlugin INSTANCE;
+ //Plugin init
+
+ @Inject
+ private Logger logger;
+
+ @Listener
+ public void onServerStart(final StartedEngineEvent event) {
+ INSTANCE = this;
+
+ logger.info("Starting AntiVPN services...");
+ //Start AntiVPN
+ }
+
}
diff --git a/Sponge/src/main/java/dev/brighten/antivpn/sponge/util/StringUtil.java b/Sponge/src/main/java/dev/brighten/antivpn/sponge/util/StringUtil.java
new file mode 100644
index 0000000..22d1a5a
--- /dev/null
+++ b/Sponge/src/main/java/dev/brighten/antivpn/sponge/util/StringUtil.java
@@ -0,0 +1,17 @@
+package dev.brighten.antivpn.sponge.util;
+
+public class StringUtil {
+
+ public static String translateColorCodes(char altColorChar, String textToTranslate) {
+ char[] b = textToTranslate.toCharArray();
+
+ for(int i = 0; i < b.length - 1; ++i) {
+ if (b[i] == altColorChar && "0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(b[i + 1]) > -1) {
+ b[i] = 167;
+ b[i + 1] = Character.toLowerCase(b[i + 1]);
+ }
+ }
+
+ return new String(b);
+ }
+}