diff --git a/pom.xml b/pom.xml
index 2ba7070..8ad200d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,13 @@
cc.funkemunky.plugins
Atlas
- 1.7.1
+ 1.6.6
+ provided
+
+
+ cc.funkemunky.utils
+ Atlas
+ 1.7
provided
diff --git a/src/main/java/dev/brighten/pl/AntiVPN.java b/src/main/java/dev/brighten/pl/AntiVPN.java
index 35b489f..8296462 100644
--- a/src/main/java/dev/brighten/pl/AntiVPN.java
+++ b/src/main/java/dev/brighten/pl/AntiVPN.java
@@ -3,8 +3,6 @@ package dev.brighten.pl;
import cc.funkemunky.api.Atlas;
import cc.funkemunky.api.reflections.types.WrappedClass;
import cc.funkemunky.api.utils.MiscUtils;
-import cc.funkemunky.api.utils.RunUtils;
-import dev.brighten.pl.data.UserData;
import dev.brighten.pl.handlers.AlertsHandler;
import dev.brighten.pl.handlers.VPNHandler;
import dev.brighten.pl.vpn.VPNAPI;
@@ -43,9 +41,11 @@ public class AntiVPN extends JavaPlugin {
return;
}
saveDefaultConfig();
-
print(true, "scanner");
- Atlas.getInstance().initializeScanner(this, true, true);
+ //We use reflection and check versions to add backwards compatibility for the time being.
+ new WrappedClass(Atlas.class).getMethod("initializeScanner",
+ atlasVersion.startsWith("1.6") ? JavaPlugin.class : Plugin.class, boolean.class, boolean.class)
+ .invoke(atlasInstance, this, true, true);
print(true, "vpn api and handlers");
vpnAPI = new VPNAPI();
@@ -56,13 +56,6 @@ public class AntiVPN extends JavaPlugin {
alertsHandler = new AlertsHandler();
MiscUtils.printToConsole("&aCompleted startup.");
-
- RunUtils.taskTimer(() -> {
- UserData.dataMap.values().stream()
- .filter(user -> !user.getPlayer().hasPermission("kvpn.bypass")
- && user.response != null && user.response.isProxy())
- .forEach(user -> user.getPlayer().kickPlayer("not checked"));
- }, this, 20L, 40L);
}
public void disable() {
@@ -73,6 +66,7 @@ public class AntiVPN extends JavaPlugin {
Bukkit.getScheduler().cancelTasks(this);
print("Save", "database");
+ AntiVPN.INSTANCE.vpnAPI.database.saveDatabase();
print(false, "threads");
AntiVPN.INSTANCE.vpnAPI.vpnThread.shutdownNow();
diff --git a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java
index 889d9bd..0f2bb74 100644
--- a/src/main/java/dev/brighten/pl/handlers/VPNHandler.java
+++ b/src/main/java/dev/brighten/pl/handlers/VPNHandler.java
@@ -15,34 +15,40 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.*;
-import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
public class VPNHandler {
- private Deque> queue = new LinkedBlockingDeque<>();
+ private LinkedList> queue = new LinkedList<>();
+ private AtomicBoolean checking = new AtomicBoolean(false);
+ private List> toAdd = new ArrayList<>();
public Map toKick = new HashMap<>();
public void run() {
- AntiVPN.INSTANCE.vpnAPI.vpnThread.execute(() -> {
- Tuple element;
- while(queue.size() > 0 && (element = queue.poll()) != null) {
- val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two);
- if(response != null && response.isSuccess()) {
- UserData data = UserData.getData(element.one);
- data.response = response;
- VPNCheckEvent event = new VPNCheckEvent(response);
- if(Config.fireEvent)
- RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE);
+ AntiVPN.INSTANCE.vpnAPI.vpnThread.scheduleAtFixedRate(() -> {
+ if(!checking.get()) {
+ Tuple element;
+ checking.set(true);
+ while(queue.size() > 0 && (element = queue.poll()) != null) {
+ val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two);
+ if(response != null && response.isSuccess()) {
+ UserData data = UserData.getData(element.one);
+ data.response = response;
+ VPNCheckEvent event = new VPNCheckEvent(response);
+ if(Config.fireEvent)
+ RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE);
- if(response.isProxy()) {
- if(Config.alertStaff) alert(response, element.one);
- if(Config.kickPlayers) kick(response, element.one);
- }
- } else MiscUtils.printToConsole((response != null) + "?");
+ if(response.isProxy()) {
+ if(Config.alertStaff) alert(response, element.one);
+ if(Config.kickPlayers) kick(response, element.one);
+ }
+ } else MiscUtils.printToConsole((response != null) + "?");
+ }
+ checking.set(false);
+ queue.addAll(toAdd);
+ toAdd.clear();
}
- run();
- });
+ }, 0L, 20L, TimeUnit.MILLISECONDS);
}
private void alert(VPNResponse response, UUID uuid) {
if(Config.alertBungee) {
@@ -69,26 +75,8 @@ public class VPNHandler {
}
public void checkPlayer(Player player) {
- AntiVPN.INSTANCE.vpnAPI.vpnThread.execute(() -> {
- val element = new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress());
- val response = AntiVPN.INSTANCE.vpnAPI.getResponse(element.two);
- if(response != null && response.isSuccess()) {
- UserData data = UserData.getData(element.one);
- data.response = response;
- VPNCheckEvent event = new VPNCheckEvent(response);
- if(Config.fireEvent)
- RunUtils.task(() -> Bukkit.getPluginManager().callEvent(event), AntiVPN.INSTANCE);
-
- if(response.isProxy()) {
- if(Config.alertStaff) alert(response, element.one);
- if(Config.kickPlayers) kick(response, element.one);
- }
- } else {
- if(response == null) {
- if(Config.alertStaff) alert(response, element.one);
- if(Config.kickPlayers) kick(response, element.one);
- }
- }
- });
+ if(!checking.get())
+ queue.add(new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress()));
+ else toAdd.add(new Tuple<>(player.getUniqueId(), player.getAddress().getAddress().getHostAddress()));
}
}
diff --git a/src/main/java/dev/brighten/pl/listeners/JoinListener.java b/src/main/java/dev/brighten/pl/listeners/JoinListener.java
index 9783d70..ac2c07c 100644
--- a/src/main/java/dev/brighten/pl/listeners/JoinListener.java
+++ b/src/main/java/dev/brighten/pl/listeners/JoinListener.java
@@ -1,7 +1,6 @@
package dev.brighten.pl.listeners;
import cc.funkemunky.api.utils.Init;
-import cc.funkemunky.api.utils.RunUtils;
import dev.brighten.pl.AntiVPN;
import dev.brighten.pl.data.UserData;
import org.bukkit.event.EventHandler;
@@ -14,7 +13,6 @@ public class JoinListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void onJoin(PlayerJoinEvent event) {
- if(event.getPlayer().hasPermission("kvpn.bypass")) return;
if(AntiVPN.INSTANCE.vpnHandler.toKick.containsKey(event.getPlayer().getUniqueId())) {
event.getPlayer().kickPlayer(AntiVPN.INSTANCE.vpnHandler.toKick
.compute(event.getPlayer().getUniqueId(),
@@ -24,12 +22,6 @@ public class JoinListener implements Listener {
UserData data = UserData.getData(event.getPlayer().getUniqueId());
data.getPlayer();
AntiVPN.INSTANCE.vpnHandler.checkPlayer(event.getPlayer());
-
- RunUtils.taskLater(() -> {
- if(data.response == null) {
- data.getPlayer().kickPlayer("not checked.");
- }
- }, AntiVPN.INSTANCE, 120L);
}
}
diff --git a/src/main/java/dev/brighten/pl/utils/JsonReader.java b/src/main/java/dev/brighten/pl/utils/JsonReader.java
new file mode 100644
index 0000000..df61e2d
--- /dev/null
+++ b/src/main/java/dev/brighten/pl/utils/JsonReader.java
@@ -0,0 +1,32 @@
+package dev.brighten.pl.utils;
+
+import cc.funkemunky.carbon.utils.json.JSONException;
+import cc.funkemunky.carbon.utils.json.JSONObject;
+
+import java.io.*;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+public class JsonReader {
+
+ private static String readAll(Reader rd) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ int cp;
+ while ((cp = rd.read()) != -1) {
+ sb.append((char) cp);
+ }
+ return sb.toString();
+ }
+
+ public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
+ InputStream is = new URL(url).openStream();
+ try {
+ BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
+ String jsonText = readAll(rd);
+ JSONObject json = new JSONObject(jsonText);
+ return json;
+ } finally {
+ is.close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/dev/brighten/pl/vpn/VPNAPI.java b/src/main/java/dev/brighten/pl/vpn/VPNAPI.java
index 926a476..ea93354 100644
--- a/src/main/java/dev/brighten/pl/vpn/VPNAPI.java
+++ b/src/main/java/dev/brighten/pl/vpn/VPNAPI.java
@@ -1,31 +1,40 @@
package dev.brighten.pl.vpn;
+import cc.funkemunky.api.utils.MathUtils;
import cc.funkemunky.api.utils.MiscUtils;
-import dev.brighten.db.db.Database;
-import dev.brighten.db.db.FlatfileDatabase;
-import dev.brighten.db.db.StructureSet;
-import dev.brighten.db.utils.json.JSONException;
-import dev.brighten.db.utils.json.JSONObject;
-import dev.brighten.db.utils.json.JsonReader;
+import cc.funkemunky.api.utils.RunUtils;
+import cc.funkemunky.carbon.db.Database;
+import cc.funkemunky.carbon.db.StructureSet;
+import cc.funkemunky.carbon.db.flatfile.FlatfileDatabase;
+import cc.funkemunky.carbon.utils.Pair;
+import cc.funkemunky.carbon.utils.json.JSONException;
+import cc.funkemunky.carbon.utils.json.JSONObject;
+import dev.brighten.pl.AntiVPN;
import dev.brighten.pl.utils.Config;
+import dev.brighten.pl.utils.JsonReader;
import lombok.val;
import org.bukkit.entity.Player;
import java.io.IOException;
-import java.util.concurrent.ExecutorService;
+import java.util.Objects;
import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
public class VPNAPI {
public Database database;
- public ExecutorService vpnThread;
+ public ScheduledExecutorService vpnThread;
public VPNAPI() {
MiscUtils.printToConsole("&cLoading VPNHandler&7...");
MiscUtils.printToConsole("&7Setting up Carbon database &eVPN-Cache&7...");
database = new FlatfileDatabase("VPN-Cache");
MiscUtils.printToConsole("&7Registering listener...");
- vpnThread = Executors.newFixedThreadPool(2);
+ vpnThread = Executors.newScheduledThreadPool(2);
+
+ //Running saveDatabase task.
+ MiscUtils.printToConsole("&7Running database saving task...");
+ RunUtils.taskTimerAsync(database::saveDatabase, AntiVPN.INSTANCE, 0, 20 * 60 * 2);
}
public VPNResponse getResponse(Player player) {
@@ -40,13 +49,23 @@ public class VPNAPI {
val json = response.toJson();
- StructureSet set = database.create(response.getIp());
- for (String key : json.keySet()) {
- set.input(key, json.get(key));
+ val pairs = json.keySet().stream().map(key -> {
+ try {
+ return new Pair<>(key, json.get(key));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }).filter(Objects::nonNull).toArray(Pair[]::new);
+
+ StructureSet set = database.createStructure(response.getIp(), pairs);
+
+ if(MathUtils.getDelta(set.getObjects().size(), pairs.length) > 1) {
+ MiscUtils.printToConsole("&cThere was an error saving response for IP &f"
+ + response.getIp() + "&c. &7Removing from database...");
+ database.remove(response.getIp());
}
-
- set.save(database);
} catch (JSONException e) {
e.printStackTrace();
}
@@ -55,13 +74,10 @@ public class VPNAPI {
public VPNResponse getIfCached(String ipAddress) {
if(database.contains(ipAddress)) {
- val list = database.get(ipAddress);
-
- if(list.size() > 0)
- return VPNResponse.fromSet(database.get(ipAddress).get(0));
+ return VPNResponse.fromSet(database.get(ipAddress));
+ } else {
+ return null;
}
-
- return null;
}
public VPNResponse getResponse(String ipAddress) {
diff --git a/src/main/java/dev/brighten/pl/vpn/VPNResponse.java b/src/main/java/dev/brighten/pl/vpn/VPNResponse.java
index 9ebe89b..860a406 100644
--- a/src/main/java/dev/brighten/pl/vpn/VPNResponse.java
+++ b/src/main/java/dev/brighten/pl/vpn/VPNResponse.java
@@ -1,8 +1,8 @@
package dev.brighten.pl.vpn;
-import dev.brighten.db.db.StructureSet;
-import dev.brighten.db.utils.json.JSONException;
-import dev.brighten.db.utils.json.JSONObject;
+import cc.funkemunky.carbon.db.StructureSet;
+import cc.funkemunky.carbon.utils.json.JSONException;
+import cc.funkemunky.carbon.utils.json.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@@ -54,14 +54,14 @@ public class VPNResponse {
}
public static VPNResponse fromSet(StructureSet set) {
- return new VPNResponse(set.getObject("ip"), set.getObject("countryName"),
- set.contains("method") ? set.getObject("method") : "N/A",
- set.getObject("countryCode"), set.getObject("state"),
- set.getObject("city"), set.getObject("isp"),
- set.getObject("timeZone"), set.getObject("locationString"),
- set.getObject("proxy"), set.getObject("usedAdvanced"),
- set.getObject("cached"), set.getObject("success"),
- set.contains("score") ? (double)set.getObject("score") : -1,
- set.getObject("queriesLeft"));
+ return new VPNResponse(set.getField("ip"), set.getField("countryName"),
+ set.containsKey("method") ? set.getField("method") : "N/A",
+ set.getField("countryCode"), set.getField("state"),
+ set.getField("city"), set.getField("isp"),
+ set.getField("timeZone"), set.getField("locationString"),
+ set.getField("proxy"), set.getField("usedAdvanced"),
+ set.getField("cached"), set.getField("success"),
+ set.containsKey("score") ? set.getDouble("score") : -1,
+ set.getField("queriesLeft"));
}
}