diff --git a/Bukkit/dependency-reduced-pom.xml b/Bukkit/dependency-reduced-pom.xml index 9874355..3e7b35e 100644 --- a/Bukkit/dependency-reduced-pom.xml +++ b/Bukkit/dependency-reduced-pom.xml @@ -7,6 +7,45 @@ 4.0.0 Bukkit + + + + true + src/main/resources + + + + + maven-compiler-plugin + 3.7.0 + + 8 + 8 + -XDignore.symbol.file + + + + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + + + org.bstats + dev.brighten.antivpn.bukkit.org.bstats + + + + + + org.github.spigot @@ -14,6 +53,12 @@ 1.13.2 provided + + dev.brighten.antivpn + Common + 1.4.0 + provided + cc.funkemunky.utils lombok diff --git a/Bukkit/pom.xml b/Bukkit/pom.xml index 7576d84..c006c24 100644 --- a/Bukkit/pom.xml +++ b/Bukkit/pom.xml @@ -23,6 +23,28 @@ -XDignore.symbol.file + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + + org.bstats + + dev.brighten.antivpn.bukkit.org.bstats + + + + + + package + + shade + + + + @@ -50,6 +72,12 @@ 1.4.0 provided + + org.bstats + bstats-bukkit + 2.2.1 + compile + \ No newline at end of file diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java index c1e821d..e9a95f7 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java @@ -35,7 +35,8 @@ public class BukkitConfig implements VPNConfig { "commands.enabled", BukkitPlugin.pluginInstance), defaultKickPlayers = new ConfigDefault<>(true, "kickPlayers", BukkitPlugin.pluginInstance), defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", - BukkitPlugin.pluginInstance); + BukkitPlugin.pluginInstance), + defaultMetrics = new ConfigDefault<>(true, "bstats", BukkitPlugin.pluginInstance); private final ConfigDefault defaultPort = new ConfigDefault<>(-1, "database.port", BukkitPlugin.pluginInstance); private final ConfigDefault> prefixWhitelistsDefault = new ConfigDefault<>(new ArrayList<>(), @@ -46,7 +47,7 @@ public class BukkitConfig implements VPNConfig { private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff; + private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; @Override public String getLicense() { @@ -140,6 +141,11 @@ public class BukkitConfig implements VPNConfig { return port; } + @Override + public boolean metrics() { + return metrics; + } + public void update() { license = licenseDefault.get(); kickMessage = kickStringDefault.get(); @@ -157,5 +163,6 @@ public class BukkitConfig implements VPNConfig { kickPlayers = defaultKickPlayers.get(); alertToStaff = defaultAlertToStaff.get(); alertMsg = defaultAlertMsg.get(); + metrics = defaultMetrics.get(); } } 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 6a9dee1..a0727da 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitPlugin.java @@ -4,12 +4,16 @@ import dev.brighten.antivpn.AntiVPN; import dev.brighten.antivpn.command.Command; import lombok.val; import net.md_5.bungee.api.ChatColor; +import org.bstats.bukkit.Metrics; +import org.bstats.charts.MultiLineChart; +import org.bstats.charts.SingleLineChart; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.command.SimpleCommandMap; import org.bukkit.event.HandlerList; import org.bukkit.plugin.SimplePluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; import java.lang.reflect.Field; import java.util.ArrayList; @@ -23,18 +27,33 @@ public class BukkitPlugin extends JavaPlugin { public static BukkitPlugin pluginInstance; private SimpleCommandMap commandMap; private List registeredCommands = new ArrayList<>(); + private SingleLineChart vpnDetections, ipsChecked; public void onEnable() { pluginInstance = this; //Loading config - System.out.println("Loading config..."); + Bukkit.getLogger().info("Loading config..."); saveDefaultConfig(); - System.out.println("Starting AntiVPN services..."); + Bukkit.getLogger().info("Starting AntiVPN services..."); AntiVPN.start(new BukkitConfig(), new BukkitListener(), new BukkitPlayerExecutor()); - System.out.println("Setting up and registering commands..."); + if(AntiVPN.getInstance().getConfig().metrics()) { + Bukkit.getLogger().info("Starting bStats metrics..."); + Metrics metrics = new Metrics(this, 12615); + metrics.addCustomChart(vpnDetections = new SingleLineChart("vpn_detections", + () -> AntiVPN.getInstance().detections)); + metrics.addCustomChart(ipsChecked = new SingleLineChart("ips_checked", + () -> AntiVPN.getInstance().checked)); + new BukkitRunnable() { + public void run() { + AntiVPN.getInstance().checked = AntiVPN.getInstance().detections = 0; + } + }.runTaskTimerAsynchronously(this, 12000, 12000); + } + + Bukkit.getLogger().info("Setting up and registering commands..."); if (pluginInstance.getServer().getPluginManager() instanceof SimplePluginManager) { SimplePluginManager manager = (SimplePluginManager) pluginInstance.getServer().getPluginManager(); try { @@ -110,10 +129,10 @@ public class BukkitPlugin extends JavaPlugin { @Override public void onDisable() { - System.out.println("Stopping plugin services..."); + Bukkit.getLogger().info("Stopping plugin services..."); AntiVPN.getInstance().stop(); - System.out.println("Unregistering commands..."); + Bukkit.getLogger().info("Unregistering commands..."); try { Field field = SimpleCommandMap.class.getDeclaredField("knownCommands"); field.setAccessible(true); @@ -126,10 +145,10 @@ public class BukkitPlugin extends JavaPlugin { e.printStackTrace(); } - System.out.println("Unregistering listeners..."); + Bukkit.getLogger().info("Unregistering listeners..."); HandlerList.unregisterAll(this); - System.out.println("Cancelling any running tasks..."); + Bukkit.getLogger().info("Cancelling any running tasks..."); Bukkit.getScheduler().cancelTasks(this); } } diff --git a/Bungee/dependency-reduced-pom.xml b/Bungee/dependency-reduced-pom.xml index 44993d0..4017f08 100644 --- a/Bungee/dependency-reduced-pom.xml +++ b/Bungee/dependency-reduced-pom.xml @@ -7,7 +7,52 @@ 4.0.0 Bungee + + + + true + src/main/resources + + + + + maven-compiler-plugin + 3.7.0 + + 8 + 8 + -XDignore.symbol.file + + + + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + + + org.bstats + dev.brighten.antivpn.bungee.org.bstats + + + + + + + + dev.brighten.antivpn + Common + 1.4.0 + provided + org.github.bungee BungeeCord-1.8 diff --git a/Bungee/pom.xml b/Bungee/pom.xml index 945cec2..f483674 100644 --- a/Bungee/pom.xml +++ b/Bungee/pom.xml @@ -23,6 +23,28 @@ -XDignore.symbol.file + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + + org.bstats + + dev.brighten.antivpn.bungee.org.bstats + + + + + + package + + shade + + + + @@ -50,6 +72,12 @@ 1.8 provided + + org.bstats + bstats-bungeecord + 2.2.1 + compile + \ No newline at end of file diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java index e4cd748..91c9db4 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java @@ -33,7 +33,8 @@ public class BungeeConfig implements VPNConfig { "commands.enabled", BungeePlugin.pluginInstance), defaultKickPlayers = new ConfigDefault<>(true, "kickPlayers", BungeePlugin.pluginInstance), defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", - BungeePlugin.pluginInstance); + BungeePlugin.pluginInstance), + defaultMetrics = new ConfigDefault<>(true, "bstats", BungeePlugin.pluginInstance); private final ConfigDefault defaultPort = new ConfigDefault<>(-1, "database.port", BungeePlugin.pluginInstance); private final ConfigDefault> prefixWhitelistsDefault = new ConfigDefault<>(new ArrayList<>(), @@ -44,7 +45,7 @@ public class BungeeConfig implements VPNConfig { private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff; + private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff, metrics; @Override public String getLicense() { @@ -138,6 +139,11 @@ public class BungeeConfig implements VPNConfig { return port; } + @Override + public boolean metrics() { + return metrics; + } + public void update() { license = licenseDefault.get(); kickMessage = kickStringDefault.get(); @@ -155,5 +161,6 @@ public class BungeeConfig implements VPNConfig { kickPlayers = defaultKickPlayers.get(); alertToStaff = defaultAlertToStaff.get(); alertMsg = defaultAlertMsg.get(); + metrics = defaultMetrics.get(); } } diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java index dbf8f73..5761b53 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeListener.java @@ -72,12 +72,14 @@ public class BungeeListener extends VPNExecutor implements Listener { command.replace("%player%", event.getPlayer().getName()))); } } + AntiVPN.getInstance().detections++; } else if(!result.isSuccess()) { BungeeCord.getInstance().getLogger() .log(Level.WARNING, "The API query was not a success! " + "You may need to upgrade your license on https://funkemunky.cc/shop"); } + AntiVPN.getInstance().checked++; }); } } 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 5567cd0..d812c6c 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeePlugin.java @@ -12,8 +12,11 @@ import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.plugin.Plugin; +import org.bstats.bungeecord.Metrics; +import org.bstats.charts.SingleLineChart; import java.util.Arrays; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; public class BungeePlugin extends Plugin { @@ -22,6 +25,7 @@ public class BungeePlugin extends Plugin { @Getter private Config config; + private SingleLineChart vpnDetections, ipsChecked; private static BaseComponent[] noPermission = new ComponentBuilder("No permission").color(ChatColor.RED) .create(); @@ -31,11 +35,25 @@ public class BungeePlugin extends Plugin { pluginInstance = this; //Setting up config + 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()); + if(AntiVPN.getInstance().getConfig().metrics()) { + BungeeCord.getInstance().getLogger().info("Starting bStats metrics..."); + Metrics metrics = new Metrics(this, 12616); + metrics.addCustomChart(vpnDetections = new SingleLineChart("vpn_detections", + () -> AntiVPN.getInstance().detections)); + metrics.addCustomChart(ipsChecked = new SingleLineChart("ips_checked", + () -> AntiVPN.getInstance().checked)); + BungeeCord.getInstance().getScheduler().schedule(this, + () -> AntiVPN.getInstance().checked = AntiVPN.getInstance().detections = 0, + 10, 10, TimeUnit.MINUTES); + } + //TODO Add command functionality for BungeeCord for (Command command : AntiVPN.getInstance().getCommands()) { BungeeCord.getInstance().getPluginManager().registerCommand(pluginInstance, new net.md_5.bungee.api.plugin diff --git a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java index 554cd9c..e1e4af2 100644 --- a/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java +++ b/Common/src/main/java/dev/brighten/antivpn/AntiVPN.java @@ -30,6 +30,7 @@ public class AntiVPN { private PlayerExecutor playerExecutor; private VPNDatabase database; private List commands = new ArrayList<>(); + public int detections, checked; public static void start(VPNConfig config, VPNExecutor executor, PlayerExecutor playerExecutor) { //Initializing diff --git a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java index 64accac..b6a1507 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java @@ -36,6 +36,8 @@ public interface VPNConfig { int getPort(); + boolean metrics(); + void update(); }