From 2bf16ad6b7b1fe72d9d350298d6d70a31a07eeb7 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 14:49:38 -0400 Subject: [PATCH 1/9] Added alerts state saving --- .../dev/brighten/antivpn/api/APIPlayer.java | 22 ++++++++- .../antivpn/database/VPNDatabase.java | 4 ++ .../antivpn/database/sql/MySqlVPN.java | 46 ++++++++++++++++++- 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java index cbe93f7..105b4ca 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java @@ -1,5 +1,6 @@ package dev.brighten.antivpn.api; +import dev.brighten.antivpn.AntiVPN; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -8,17 +9,34 @@ import java.net.InetAddress; import java.util.UUID; @Getter -@RequiredArgsConstructor public abstract class APIPlayer { private final UUID uuid; private final String name; private final InetAddress ip; - @Setter private boolean alertsEnabled; + public APIPlayer(UUID uuid, String name, InetAddress ip) { + this.uuid = uuid; + this.name = name; + this.ip = ip; + + AntiVPN.getInstance().getDatabase().alertsState(uuid, enabled -> { + if(enabled) { + alertsEnabled = enabled; //This can be within the if statement. It's not dirty, it lowers field writes. + sendMessage(""); + } + }); + } + public abstract void sendMessage(String message); public abstract void kickPlayer(String reason); public abstract boolean hasPermission(String permission); + + public void setAlertsEnabled(boolean alertsEnabled) { + this.alertsEnabled = alertsEnabled; + //Updating into database so its synced across servers and saved on logout. + AntiVPN.getInstance().getDatabase().updateAlertsState(uuid, alertsEnabled); + } } diff --git a/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java b/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java index 3e64f57..ad6036a 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/VPNDatabase.java @@ -22,6 +22,10 @@ public interface VPNDatabase { void isWhitelistedAsync(UUID uuid, Consumer result); + void alertsState(UUID uuid, Consumer result); + + void updateAlertsState(UUID uuid, boolean state); + void init(); void shutdown(); diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 92ce325..f2d6bb2 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -137,6 +137,38 @@ public class MySqlVPN implements VPNDatabase { VPNExecutor.threadExecutor.execute(() -> result.accept(isWhitelisted(uuid))); } + @Override + public void alertsState(UUID uuid, Consumer result) { + VPNExecutor.threadExecutor.execute(() -> { + ResultSet set = Query.prepare("select * from `alerts` where `uuid` = ?") + .append(uuid.toString()).executeQuery(); + + try { + result.accept(set.next()); + } catch (SQLException e) { + e.printStackTrace(); + result.accept(false); + } + }); + } + + @Override + public void updateAlertsState(UUID uuid, boolean enabled) { + if(enabled) { + //We want to make sure there isn't already a uuid inserted to prevent double insertions + alertsState(uuid, alreadyEnabled -> { //No need to make another thread execute, already async + if(!alreadyEnabled) { + Query.prepare("insert into `alerts` (`uuid`) values ?").append(uuid.toString()) + .execute(); + } //No need to insert again of already enabled + }); + //Removing any uuid from the alerts table will disable alerts globally. + } else VPNExecutor.threadExecutor.execute(() -> + Query.prepare("delete from `alerts` where `uuid` = ?") + .append(uuid.toString()) + .execute()); + } + @Override public void init() { if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) @@ -145,11 +177,21 @@ public class MySqlVPN implements VPNDatabase { MySQL.init(); System.out.println("Creating tables..."); + + //Running check for old table types to update + oldTableCheck: { + Query.prepare("select `DATA_TYPE` from INFORMATION_SCHEMA.COLUMNS " + + "WHERE table_name = 'responses' AND COLUMN_NAME = 'isp';").execute(set -> { + System.out.println("Data type: " + set.getObject("DATA_TYPE")); + }); + } + Query.prepare("create table if not exists `whitelisted` (`uuid` varchar(36) not null)").execute(); Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, `asn` varchar(12)," - + "`countryName` varchar(64), `countryCode` varchar(10), `city` varchar(64), `timeZone` varchar(64), " - + "`method` varchar(32), `isp` varchar(64), `proxy` boolean, `cached` boolean, `inserted` timestamp," + + "`countryName` text, `countryCode` varchar(10), `city` text, `timeZone` varchar(64), " + + "`method` varchar(32), `isp` text, `proxy` boolean, `cached` boolean, `inserted` timestamp," + "`latitude` double, `longitude` double)").execute(); + Query.prepare("create table if not exists `alerts` (`uuid` varchar(36) not null)").execute(); System.out.println("Creating indexes..."); try { From a3cb7e8e8a2e58b5a80dcc645bb4b731edd100c1 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 14:50:18 -0400 Subject: [PATCH 2/9] Adding check for closed connections to prevent errors --- .../antivpn/database/sql/MySqlVPN.java | 30 +++++++++++-------- .../antivpn/database/sql/utils/MySQL.java | 7 +++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index f2d6bb2..bd5278a 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -44,8 +44,9 @@ public class MySqlVPN implements VPNDatabase { @Override public Optional getStoredResponse(String ip) { - if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()|| MySQL.isClosed()) return Optional.empty(); + ResultSet rs = Query.prepare("select * from `responses` where `ip` = ? limit 1").append(ip).executeQuery(); try { @@ -77,8 +78,9 @@ public class MySqlVPN implements VPNDatabase { */ @Override public void cacheResponse(VPNResponse toCache) { - if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled() || MySQL.isClosed()) return; + Query.prepare("insert into `responses` (`ip`,`asn`,`countryName`,`countryCode`,`city`,`timeZone`," + "`method`,`isp`,`proxy`,`cached`,`inserted`,`latitude`,`longitude`) values (?,?,?,?,?,?,?,?,?,?,?,?,?)") .append(toCache.getIp()).append(toCache.getAsn()).append(toCache.getCountryName()) @@ -91,7 +93,7 @@ public class MySqlVPN implements VPNDatabase { @SneakyThrows @Override public boolean isWhitelisted(UUID uuid) { - if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled()) + if (!AntiVPN.getInstance().getConfig().isDatabaseEnabled() || MySQL.isClosed()) return false; ResultSet set = Query.prepare("select uuid from `whitelisted` where `uuid` = ? limit 1").append(uuid.toString()) .executeQuery(); @@ -101,6 +103,8 @@ public class MySqlVPN implements VPNDatabase { @Override public void setWhitelisted(UUID uuid, boolean whitelisted) { + if(MySQL.isClosed()) return; + if (whitelisted) { if (!isWhitelisted(uuid)) { Query.prepare("insert into `whitelisted` (`uuid`) values (?)").append(uuid.toString()).execute(); @@ -115,6 +119,9 @@ public class MySqlVPN implements VPNDatabase { @Override public List getAllWhitelisted() { List uuids = new ArrayList<>(); + + if(MySQL.isClosed()) return uuids; + ResultSet set = Query.prepare("select uuid from `whitelisted`").executeQuery(); try { @@ -129,16 +136,22 @@ public class MySqlVPN implements VPNDatabase { @Override public void getStoredResponseAsync(String ip, Consumer> result) { + if(MySQL.isClosed()) return; + VPNExecutor.threadExecutor.execute(() -> result.accept(getStoredResponse(ip))); } @Override public void isWhitelistedAsync(UUID uuid, Consumer result) { + if(MySQL.isClosed()) return; + VPNExecutor.threadExecutor.execute(() -> result.accept(isWhitelisted(uuid))); } @Override public void alertsState(UUID uuid, Consumer result) { + if(MySQL.isClosed()) return; + VPNExecutor.threadExecutor.execute(() -> { ResultSet set = Query.prepare("select * from `alerts` where `uuid` = ?") .append(uuid.toString()).executeQuery(); @@ -154,6 +167,8 @@ public class MySqlVPN implements VPNDatabase { @Override public void updateAlertsState(UUID uuid, boolean enabled) { + if(MySQL.isClosed()) return; + if(enabled) { //We want to make sure there isn't already a uuid inserted to prevent double insertions alertsState(uuid, alreadyEnabled -> { //No need to make another thread execute, already async @@ -177,15 +192,6 @@ public class MySqlVPN implements VPNDatabase { MySQL.init(); System.out.println("Creating tables..."); - - //Running check for old table types to update - oldTableCheck: { - Query.prepare("select `DATA_TYPE` from INFORMATION_SCHEMA.COLUMNS " + - "WHERE table_name = 'responses' AND COLUMN_NAME = 'isp';").execute(set -> { - System.out.println("Data type: " + set.getObject("DATA_TYPE")); - }); - } - Query.prepare("create table if not exists `whitelisted` (`uuid` varchar(36) not null)").execute(); Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, `asn` varchar(12)," + "`countryName` text, `countryCode` varchar(10), `city` text, `timeZone` varchar(64), " diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java index a46bb1b..2d06abd 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java @@ -47,4 +47,11 @@ public class MySQL { e.printStackTrace(); } } + + public static boolean isClosed() { + if(conn == null) + return true; + + return conn,isClosed(); + } } From c1ef2eef5615f62657e6e6fc355fcb4ec994c85a Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 14:53:29 -0400 Subject: [PATCH 3/9] 1.4.1 Fixing table truncation to update --- Assembly/dependency-reduced-pom.xml | 2 +- Assembly/pom.xml | 2 +- Bukkit/dependency-reduced-pom.xml | 4 ++-- Bukkit/pom.xml | 4 ++-- Bungee/dependency-reduced-pom.xml | 4 ++-- Bungee/pom.xml | 4 ++-- Common/pom.xml | 2 +- .../brighten/antivpn/database/sql/MySqlVPN.java | 15 +++++++++++++++ .../antivpn/database/sql/utils/MySQL.java | 8 +++++++- pom.xml | 2 +- 10 files changed, 34 insertions(+), 13 deletions(-) diff --git a/Assembly/dependency-reduced-pom.xml b/Assembly/dependency-reduced-pom.xml index ccd0cfd..647e85b 100644 --- a/Assembly/dependency-reduced-pom.xml +++ b/Assembly/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 Assembly diff --git a/Assembly/pom.xml b/Assembly/pom.xml index 03f5fef..76b9739 100644 --- a/Assembly/pom.xml +++ b/Assembly/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml index 3e7b35e..18d1ed9 100644 --- a/Bukkit/dependency-reduced-pom.xml +++ b/Bukkit/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 Bukkit @@ -56,7 +56,7 @@ dev.brighten.antivpn Common - 1.4.0 + 1.4.1 provided diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml index c006c24..b2fcc9b 100644 --- a/Bukkit/pom.xml +++ b/Bukkit/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 @@ -69,7 +69,7 @@ dev.brighten.antivpn Common - 1.4.0 + 1.4.1 provided diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml index 4017f08..b671610 100644 --- a/Bungee/dependency-reduced-pom.xml +++ b/Bungee/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 Bungee @@ -50,7 +50,7 @@ dev.brighten.antivpn Common - 1.4.0 + 1.4.1 provided diff --git a/Bungee/pom.xml b/Bungee/pom.xml index f483674..a35fd25 100644 --- a/Bungee/pom.xml +++ b/Bungee/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 @@ -63,7 +63,7 @@ dev.brighten.antivpn Common - 1.4.0 + 1.4.1 provided diff --git a/Common/pom.xml b/Common/pom.xml index a8482ee..8821122 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -5,7 +5,7 @@ AntiVPN dev.brighten.antivpn - 1.4.0 + 1.4.1 4.0.0 diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index bd5278a..e09d142 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -192,6 +192,21 @@ public class MySqlVPN implements VPNDatabase { MySQL.init(); System.out.println("Creating tables..."); + + //Running check for old table types to update + oldTableCheck: { + Query.prepare("select `DATA_TYPE` from INFORMATION_SCHEMA.COLUMNS " + + "WHERE table_name = 'responses' AND COLUMN_NAME = 'isp';").execute(set -> { + if(set.getObject("DATA_TYPE").toString().contains("varchar")) { + System.out.println("Using old database format for storing responses! " + + "Dropping table and creating a new one..."); + if(Query.prepare("drop table `responses`").execute() == 1) { + System.out.println("Sucessfully dropped table!"); + } + } + }); + } + Query.prepare("create table if not exists `whitelisted` (`uuid` varchar(36) not null)").execute(); Query.prepare("create table if not exists `responses` (`ip` varchar(45) not null, `asn` varchar(12)," + "`countryName` text, `countryCode` varchar(10), `city` text, `timeZone` varchar(64), " diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java index 2d06abd..7718312 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/utils/MySQL.java @@ -4,6 +4,7 @@ import dev.brighten.antivpn.AntiVPN; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.SQLException; public class MySQL { private static Connection conn; @@ -52,6 +53,11 @@ public class MySQL { if(conn == null) return true; - return conn,isClosed(); + try { + return conn.isClosed(); + } catch (SQLException e) { + e.printStackTrace(); + return true; + } } } diff --git a/pom.xml b/pom.xml index e4810a7..f5db8d3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ dev.brighten.antivpn AntiVPN pom - 1.4.0 + 1.4.1 Common From b573fca58b1f3f72d39b64e008764934c2e47fd5 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:09:02 -0400 Subject: [PATCH 4/9] Fixing sql errors and fixing NPE of missing VpnStrings --- .../java/dev/brighten/antivpn/bukkit/BukkitPlugin.java | 6 ++++++ .../java/dev/brighten/antivpn/bungee/BungeePlugin.java | 9 ++++++++- .../java/dev/brighten/antivpn/database/sql/MySqlVPN.java | 6 +++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java index a0727da..fd8ad2b 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java @@ -1,6 +1,7 @@ package dev.brighten.antivpn.bukkit; import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.bukkit.util.ConfigDefault; import dev.brighten.antivpn.command.Command; import lombok.val; import net.md_5.bungee.api.ChatColor; @@ -39,6 +40,11 @@ public class BukkitPlugin extends JavaPlugin { Bukkit.getLogger().info("Starting AntiVPN services..."); AntiVPN.start(new BukkitConfig(), new BukkitListener(), new BukkitPlayerExecutor()); + Bukkit.getLogger().info("Getting strings..."); + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BukkitPlugin.pluginInstance) + .get()); + if(AntiVPN.getInstance().getConfig().metrics()) { Bukkit.getLogger().info("Starting bStats metrics..."); Metrics metrics = new Metrics(this, 12615); diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java index d812c6c..c77f367 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java @@ -2,6 +2,7 @@ package dev.brighten.antivpn.bungee; import dev.brighten.antivpn.AntiVPN; import dev.brighten.antivpn.bungee.util.Config; +import dev.brighten.antivpn.bungee.util.ConfigDefault; import dev.brighten.antivpn.command.Command; import lombok.Getter; import lombok.val; @@ -27,7 +28,7 @@ public class BungeePlugin extends Plugin { private Config config; private SingleLineChart vpnDetections, ipsChecked; - private static BaseComponent[] noPermission = new ComponentBuilder("No permission").color(ChatColor.RED) + private static final BaseComponent[] noPermission = new ComponentBuilder("No permission").color(ChatColor.RED) .create(); @Override @@ -38,10 +39,16 @@ public class BungeePlugin extends Plugin { BungeeCord.getInstance().getLogger().info("Loading config..."); config = new Config(); + //Loading plugin BungeeCord.getInstance().getLogger().info("Starting AntiVPN services..."); AntiVPN.start(new BungeeConfig(), new BungeeListener(), new BungeePlayerExecutor()); + BungeeCord.getInstance().getLogger().info("Getting strings..."); + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BungeePlugin.pluginInstance) + .get()); + if(AntiVPN.getInstance().getConfig().metrics()) { BungeeCord.getInstance().getLogger().info("Starting bStats metrics..."); Metrics metrics = new Metrics(this, 12616); diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index e09d142..0fe7025 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -173,7 +173,7 @@ public class MySqlVPN implements VPNDatabase { //We want to make sure there isn't already a uuid inserted to prevent double insertions alertsState(uuid, alreadyEnabled -> { //No need to make another thread execute, already async if(!alreadyEnabled) { - Query.prepare("insert into `alerts` (`uuid`) values ?").append(uuid.toString()) + Query.prepare("insert into `alerts` (`uuid`) values (?)").append(uuid.toString()) .execute(); } //No need to insert again of already enabled }); @@ -200,8 +200,8 @@ public class MySqlVPN implements VPNDatabase { if(set.getObject("DATA_TYPE").toString().contains("varchar")) { System.out.println("Using old database format for storing responses! " + "Dropping table and creating a new one..."); - if(Query.prepare("drop table `responses`").execute() == 1) { - System.out.println("Sucessfully dropped table!"); + if(Query.prepare("drop table `responses`").execute() > 0) { + System.out.println("Successfully dropped table!"); } } }); From 795f0333c764c80123e111b97705e23d890fcdf3 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:25:42 -0400 Subject: [PATCH 5/9] Fixing whitelist bug and alertsState bug - Whitelisted players would not actually return as whitelisted from the database because of use the getFetchSize parameter, which was not used as it was intended. - The same reasoning as above is why the alertsState would not function. --- .../antivpn/bukkit/BukkitListener.java | 18 ++++++++++++++++++ .../dev/brighten/antivpn/api/APIPlayer.java | 11 ++++------- .../antivpn/command/impl/AlertsCommand.java | 1 + .../antivpn/database/sql/MySqlVPN.java | 6 +++--- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java index 6bebb18..aa6d288 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java @@ -3,6 +3,7 @@ package dev.brighten.antivpn.bukkit; import dev.brighten.antivpn.AntiVPN; import dev.brighten.antivpn.api.APIPlayer; import dev.brighten.antivpn.api.VPNExecutor; +import dev.brighten.antivpn.message.VpnString; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -12,6 +13,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @@ -45,6 +47,22 @@ public class BukkitListener extends VPNExecutor implements Listener { if(cacheResetTask != null && !cacheResetTask.isCancelled()) cacheResetTask.cancel(); } + @EventHandler + public void onJoin(final PlayerJoinEvent event) { + AntiVPN.getInstance().getPlayerExecutor().getPlayer(event.getPlayer().getUniqueId()) + .ifPresent(player -> { + AntiVPN.getInstance().getDatabase().alertsState(player.getUuid(), enabled -> { + if(enabled) { + System.out.println("Enabled"); + player.setAlertsEnabled(true); + player.sendMessage(AntiVPN.getInstance().getMessageHandler() + .getString("command-alerts-toggled") + .getFormattedMessage(new VpnString.Var<>("state", true))); + } else System.out.println("Not enabled"); + }); + }); + } + @EventHandler public void onListener(final PlayerLoginEvent event) { //If they're exempt, don't check. diff --git a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java index 105b4ca..bfa4ccc 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java @@ -1,6 +1,7 @@ package dev.brighten.antivpn.api; import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.message.VpnString; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -19,13 +20,6 @@ public abstract class APIPlayer { this.uuid = uuid; this.name = name; this.ip = ip; - - AntiVPN.getInstance().getDatabase().alertsState(uuid, enabled -> { - if(enabled) { - alertsEnabled = enabled; //This can be within the if statement. It's not dirty, it lowers field writes. - sendMessage(""); - } - }); } public abstract void sendMessage(String message); @@ -36,6 +30,9 @@ public abstract class APIPlayer { public void setAlertsEnabled(boolean alertsEnabled) { this.alertsEnabled = alertsEnabled; + } + + public void updateAlertsState() { //Updating into database so its synced across servers and saved on logout. AntiVPN.getInstance().getDatabase().updateAlertsState(uuid, alertsEnabled); } diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/AlertsCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/AlertsCommand.java index a7f5d8c..113bea4 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/impl/AlertsCommand.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/AlertsCommand.java @@ -55,6 +55,7 @@ public class AlertsCommand extends Command { APIPlayer player = pgetter.get(); player.setAlertsEnabled(!player.isAlertsEnabled()); + player.updateAlertsState(); return AntiVPN.getInstance().getMessageHandler().getString("command-alerts-toggled") .getFormattedMessage(new VpnString.Var<>("state", player.isAlertsEnabled())); diff --git a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java index 0fe7025..69d8730 100644 --- a/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/database/sql/MySqlVPN.java @@ -98,7 +98,7 @@ public class MySqlVPN implements VPNDatabase { ResultSet set = Query.prepare("select uuid from `whitelisted` where `uuid` = ? limit 1").append(uuid.toString()) .executeQuery(); - return set != null && set.getFetchSize() > 0 && set.next() && set.getString("uuid") != null; + return set != null && set.next() && set.getString("uuid") != null; } @Override @@ -153,11 +153,11 @@ public class MySqlVPN implements VPNDatabase { if(MySQL.isClosed()) return; VPNExecutor.threadExecutor.execute(() -> { - ResultSet set = Query.prepare("select * from `alerts` where `uuid` = ?") + ResultSet set = Query.prepare("select * from `alerts` where `uuid` = ? limit 1") .append(uuid.toString()).executeQuery(); try { - result.accept(set.next()); + result.accept(set != null && set.next() && set.getString("uuid") != null); } catch (SQLException e) { e.printStackTrace(); result.accept(false); From 7a229b23ffed65b0ea9df9f7dc7414fc2dcadf9d Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:25:55 -0400 Subject: [PATCH 6/9] Turning alerts on for players on reloads if they are already online --- Common/src/main/java/dev/brighten/antivpn/AntiVPN.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java index 58bae49..53dade0 100644 --- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java @@ -71,6 +71,16 @@ public class AntiVPN { //Registering commands INSTANCE.registerCommands(); + + //Turning on alerts of players who are already online. + playerExecutor.getOnlinePlayers().forEach(player -> { + //We want to make sure they even have permission to see alerts before we make a bunch + //of unnecessary database queries. + if(player.hasPermission("antivpn.command.alerts")) { + //Running database check for enabled alerts. + INSTANCE.database.alertsState(player.getUuid(), player::setAlertsEnabled); + } + }); } public void stop() { From 723aa6a127fa7d01d3146e0ca3226165ddb792d6 Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:35:25 -0400 Subject: [PATCH 7/9] Fixing messages from config not loading or setting --- .../dev/brighten/antivpn/bukkit/BukkitPlugin.java | 11 ++++++----- .../dev/brighten/antivpn/bungee/BungeePlugin.java | 11 ++++++----- .../src/main/java/dev/brighten/antivpn/AntiVPN.java | 1 - 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java index fd8ad2b..70101aa 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java @@ -40,11 +40,6 @@ public class BukkitPlugin extends JavaPlugin { Bukkit.getLogger().info("Starting AntiVPN services..."); AntiVPN.start(new BukkitConfig(), new BukkitListener(), new BukkitPlayerExecutor()); - Bukkit.getLogger().info("Getting strings..."); - AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> - (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BukkitPlugin.pluginInstance) - .get()); - if(AntiVPN.getInstance().getConfig().metrics()) { Bukkit.getLogger().info("Starting bStats metrics..."); Metrics metrics = new Metrics(this, 12615); @@ -131,6 +126,12 @@ public class BukkitPlugin extends JavaPlugin { registeredCommands.add(newCommand); commandMap.register(pluginInstance.getName(), newCommand); } + + Bukkit.getLogger().info("Getting strings..."); + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BukkitPlugin.pluginInstance) + .get()); + AntiVPN.getInstance().getMessageHandler().reloadStrings(); } @Override diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java index c77f367..3fe26ed 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java @@ -44,11 +44,6 @@ public class BungeePlugin extends Plugin { BungeeCord.getInstance().getLogger().info("Starting AntiVPN services..."); AntiVPN.start(new BungeeConfig(), new BungeeListener(), new BungeePlayerExecutor()); - BungeeCord.getInstance().getLogger().info("Getting strings..."); - AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> - (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BungeePlugin.pluginInstance) - .get()); - if(AntiVPN.getInstance().getConfig().metrics()) { BungeeCord.getInstance().getLogger().info("Starting bStats metrics..."); Metrics metrics = new Metrics(this, 12616); @@ -105,6 +100,12 @@ public class BungeePlugin extends Plugin { } }); } + + BungeeCord.getInstance().getLogger().info("Getting strings..."); + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BungeePlugin.pluginInstance) + .get()); + AntiVPN.getInstance().getMessageHandler().reloadStrings(); } @Override diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java index 53dade0..62541df 100644 --- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java @@ -5,7 +5,6 @@ import dev.brighten.antivpn.api.VPNConfig; import dev.brighten.antivpn.api.VPNExecutor; import dev.brighten.antivpn.command.Command; import dev.brighten.antivpn.command.impl.AntiVPNCommand; -import dev.brighten.antivpn.command.impl.LookupCommand; import dev.brighten.antivpn.database.VPNDatabase; import dev.brighten.antivpn.database.sql.MySqlVPN; import dev.brighten.antivpn.message.MessageHandler; From 28094f7d467cb58e275f1db99768c9c353428e1b Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:36:35 -0400 Subject: [PATCH 8/9] Commenting out init for now until system is finished --- .../main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java | 5 +++-- .../main/java/dev/brighten/antivpn/bungee/BungeePlugin.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java index 70101aa..a68e77f 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java @@ -127,11 +127,12 @@ public class BukkitPlugin extends JavaPlugin { commandMap.register(pluginInstance.getName(), newCommand); } - Bukkit.getLogger().info("Getting strings..."); + //TODO Finish system before implementing on startup + /*Bukkit.getLogger().info("Getting strings..."); AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BukkitPlugin.pluginInstance) .get()); - AntiVPN.getInstance().getMessageHandler().reloadStrings(); + AntiVPN.getInstance().getMessageHandler().reloadStrings();*/ } @Override diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java index 3fe26ed..a890f19 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java @@ -101,11 +101,12 @@ public class BungeePlugin extends Plugin { }); } - BungeeCord.getInstance().getLogger().info("Getting strings..."); + //TODO Finish system before implementing on startup + /*BungeeCord.getInstance().getLogger().info("Getting strings..."); AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BungeePlugin.pluginInstance) .get()); - AntiVPN.getInstance().getMessageHandler().reloadStrings(); + AntiVPN.getInstance().getMessageHandler().reloadStrings();*/ } @Override From b23fed5392a341d2000106dce68eff2b6c3880ad Mon Sep 17 00:00:00 2001 From: funkemunky Date: Thu, 9 Sep 2021 15:55:41 -0400 Subject: [PATCH 9/9] Fixing no messages error --- .../main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java | 3 +++ .../main/java/dev/brighten/antivpn/bungee/BungeePlugin.java | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java index a68e77f..d8b4c14 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java @@ -127,6 +127,9 @@ public class BukkitPlugin extends JavaPlugin { commandMap.register(pluginInstance.getName(), newCommand); } + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BukkitPlugin.pluginInstance) + .get()); //TODO Finish system before implementing on startup /*Bukkit.getLogger().info("Getting strings..."); AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java index a890f19..2fa9535 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java @@ -101,6 +101,10 @@ public class BungeePlugin extends Plugin { }); } + BungeeCord.getInstance().getLogger().info("Getting strings..."); + AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<> + (vpnString.getDefaultMessage(), "messages." + vpnString.getKey(), BungeePlugin.pluginInstance) + .get()); //TODO Finish system before implementing on startup /*BungeeCord.getInstance().getLogger().info("Getting strings..."); AntiVPN.getInstance().getMessageHandler().initStrings(vpnString -> new ConfigDefault<>