diff --git a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java index 6a8f427..722e52c 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitCommandExecutor.java @@ -1,9 +1,15 @@ package dev.brighten.antivpn.bukkit; +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.api.APIPlayer; +import dev.brighten.antivpn.api.PlayerExecutor; import dev.brighten.antivpn.command.CommandExecutor; import lombok.RequiredArgsConstructor; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Optional; @RequiredArgsConstructor public class BukkitCommandExecutor implements CommandExecutor { @@ -19,4 +25,16 @@ public class BukkitCommandExecutor implements CommandExecutor { public boolean hasPermission(String permission) { return sender.hasPermission(permission); } + + @Override + public Optional getPlayer() { + if(!isPlayer()) return Optional.empty(); + + return AntiVPN.getInstance().getPlayerExecutor().getPlayer(((Player)sender).getUniqueId()); + } + + @Override + public boolean isPlayer() { + return sender instanceof Player; + } } 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 c80536b..c1e821d 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitConfig.java @@ -24,13 +24,18 @@ public class BukkitConfig implements VPNConfig { "database.password", BukkitPlugin.pluginInstance), defaultAuthDatabase = new ConfigDefault<>("admin", "database.auth", BukkitPlugin.pluginInstance), - defaultIp = new ConfigDefault<>("localhost", "database.ip", BukkitPlugin.pluginInstance); + defaultIp = new ConfigDefault<>("localhost", "database.ip", BukkitPlugin.pluginInstance), + defaultAlertMsg = new ConfigDefault<>("&8[&6KauriVPN&8] &e%player% &7has joined on a VPN/proxy" + + " &8(&f%reason%&8) &7in location &8(&f%city%&7, &f%country%&8)", "alerts.message", + BukkitPlugin.pluginInstance); private final ConfigDefault cacheResultsDefault = new ConfigDefault<>(true, "cachedResults", BukkitPlugin.pluginInstance), defaultDatabaseEnabled = new ConfigDefault<>(false, "database.enabled", BukkitPlugin.pluginInstance), defaultCommandsEnable = new ConfigDefault<>(false, "commands.enabled", BukkitPlugin.pluginInstance), defaultKickPlayers - = new ConfigDefault<>(true, "kickPlayers", BukkitPlugin.pluginInstance); + = new ConfigDefault<>(true, "kickPlayers", BukkitPlugin.pluginInstance), + defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", + BukkitPlugin.pluginInstance); private final ConfigDefault defaultPort = new ConfigDefault<>(-1, "database.port", BukkitPlugin.pluginInstance); private final ConfigDefault> prefixWhitelistsDefault = new ConfigDefault<>(new ArrayList<>(), @@ -38,10 +43,10 @@ public class BukkitConfig implements VPNConfig { Collections.singletonList("kick %player% VPNs are not allowed on our server!"), "commands.execute", BukkitPlugin.pluginInstance); - private String license, kickMessage, databaseType, databaseName, username, password, ip; + private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers; + private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff; @Override public String getLicense() { @@ -58,6 +63,16 @@ public class BukkitConfig implements VPNConfig { return kickMessage; } + @Override + public String alertMessage() { + return alertMsg; + } + + @Override + public boolean alertToStaff() { + return alertToStaff; + } + @Override public boolean runCommands() { return commandsEnabled; @@ -140,5 +155,7 @@ public class BukkitConfig implements VPNConfig { commandsEnabled = defaultCommandsEnable.get(); commands = defaultCommands.get(); kickPlayers = defaultKickPlayers.get(); + alertToStaff = defaultAlertToStaff.get(); + alertMsg = defaultAlertMsg.get(); } } 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 a2bcd60..ead3ab0 100644 --- a/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java +++ b/Bukkit/src/main/java/dev/brighten/antivpn/bukkit/BukkitListener.java @@ -69,7 +69,7 @@ public class BukkitListener extends VPNExecutor implements Listener { command.replace("%player%", event.getName()))); } } - System.out.println(player.getPlayer().getName() + Bukkit.getLogger().info(player.getPlayer().getName() + " joined on a VPN/Proxy (" + result.getMethod() + ")"); } }.runTask(BukkitPlugin.pluginInstance); diff --git a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeCommandExecutor.java b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeCommandExecutor.java index b524fe6..d58c65a 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeCommandExecutor.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeCommandExecutor.java @@ -1,10 +1,15 @@ package dev.brighten.antivpn.bungee; +import dev.brighten.antivpn.AntiVPN; +import dev.brighten.antivpn.api.APIPlayer; import dev.brighten.antivpn.command.CommandExecutor; import lombok.RequiredArgsConstructor; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.util.Optional; @RequiredArgsConstructor public class BungeeCommandExecutor implements CommandExecutor { @@ -21,4 +26,16 @@ public class BungeeCommandExecutor implements CommandExecutor { public boolean hasPermission(String permission) { return executor.hasPermission(permission); } + + @Override + public Optional getPlayer() { + if(!isPlayer()) return Optional.empty(); + + return AntiVPN.getInstance().getPlayerExecutor().getPlayer(((ProxiedPlayer)executor).getUniqueId()); + } + + @Override + public boolean isPlayer() { + return executor instanceof ProxiedPlayer; + } } 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 da0d4f3..e4cd748 100644 --- a/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java +++ b/Bungee/src/main/java/dev/brighten/antivpn/bungee/BungeeConfig.java @@ -22,13 +22,18 @@ public class BungeeConfig implements VPNConfig { "database.password", BungeePlugin.pluginInstance), defaultAuthDatabase = new ConfigDefault<>("admin", "database.auth", BungeePlugin.pluginInstance), - defaultIp = new ConfigDefault<>("localhost", "database.ip", BungeePlugin.pluginInstance); + defaultIp = new ConfigDefault<>("localhost", "database.ip", BungeePlugin.pluginInstance), + defaultAlertMsg = new ConfigDefault<>("&8[&6KauriVPN&8] &e%player% &7has joined on a VPN/proxy" + + " &8(&f%reason%&8) &7in location &8(&f%city%&7, &f%country%&8)", "alerts.message", + BungeePlugin.pluginInstance); private final ConfigDefault cacheResultsDefault = new ConfigDefault<>(true, "cachedResults", BungeePlugin.pluginInstance), defaultDatabaseEnabled = new ConfigDefault<>(false, "database.enabled", BungeePlugin.pluginInstance), defaultCommandsEnable = new ConfigDefault<>(false, "commands.enabled", BungeePlugin.pluginInstance), defaultKickPlayers - = new ConfigDefault<>(true, "kickPlayers", BungeePlugin.pluginInstance); + = new ConfigDefault<>(true, "kickPlayers", BungeePlugin.pluginInstance), + defaultAlertToStaff = new ConfigDefault<>(true, "alerts.enabled", + BungeePlugin.pluginInstance); private final ConfigDefault defaultPort = new ConfigDefault<>(-1, "database.port", BungeePlugin.pluginInstance); private final ConfigDefault> prefixWhitelistsDefault = new ConfigDefault<>(new ArrayList<>(), @@ -36,10 +41,10 @@ public class BungeeConfig implements VPNConfig { Collections.singletonList("kick %player% VPNs are not allowed on our server!"), "commands.execute", BungeePlugin.pluginInstance); - private String license, kickMessage, databaseType, databaseName, username, password, ip; + private String license, kickMessage, databaseType, databaseName, username, password, ip, alertMsg; private List prefixWhitelists, commands; private int port; - private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers; + private boolean cacheResults, databaseEnabled, commandsEnabled, kickPlayers, alertToStaff; @Override public String getLicense() { @@ -56,6 +61,16 @@ public class BungeeConfig implements VPNConfig { return kickMessage; } + @Override + public String alertMessage() { + return alertMsg; + } + + @Override + public boolean alertToStaff() { + return alertToStaff; + } + @Override public boolean runCommands() { return commandsEnabled; @@ -138,5 +153,7 @@ public class BungeeConfig implements VPNConfig { commandsEnabled = defaultCommandsEnable.get(); commands = defaultCommands.get(); kickPlayers = defaultKickPlayers.get(); + alertToStaff = defaultAlertToStaff.get(); + alertMsg = defaultAlertMsg.get(); } } 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 fd871c0..cbe93f7 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/APIPlayer.java @@ -2,6 +2,7 @@ package dev.brighten.antivpn.api; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import java.net.InetAddress; import java.util.UUID; @@ -12,6 +13,8 @@ public abstract class APIPlayer { private final UUID uuid; private final String name; private final InetAddress ip; + @Setter + private boolean alertsEnabled; public abstract void sendMessage(String message); 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 6d26394..64accac 100644 --- a/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java +++ b/Common/src/main/java/dev/brighten/antivpn/api/VPNConfig.java @@ -10,6 +10,10 @@ public interface VPNConfig { String getKickString(); + String alertMessage(); + + boolean alertToStaff(); + boolean runCommands(); List commands(); diff --git a/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java b/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java index 5109744..23a29bb 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/CommandExecutor.java @@ -1,8 +1,15 @@ package dev.brighten.antivpn.command; +import dev.brighten.antivpn.api.APIPlayer; +import dev.brighten.antivpn.api.PlayerExecutor; + +import java.util.Optional; + public interface CommandExecutor { void sendMessage(String message); boolean hasPermission(String permission); + Optional getPlayer(); + boolean isPlayer(); } 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 new file mode 100644 index 0000000..9fa39cc --- /dev/null +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/AlertsCommand.java @@ -0,0 +1,67 @@ +package dev.brighten.antivpn.command.impl; + +import dev.brighten.antivpn.api.APIPlayer; +import dev.brighten.antivpn.command.Command; +import dev.brighten.antivpn.command.CommandExecutor; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +public class AlertsCommand extends Command { + @Override + public String permission() { + return "antivpn.command.alerts"; + } + + @Override + public String name() { + return "alerts"; + } + + @Override + public String[] aliases() { + return new String[] {"valerts", "vpnalerts"}; + } + + @Override + public String description() { + return "toggle VPN use alerts"; + } + + @Override + public String usage() { + return ""; + } + + @Override + public String parent() { + return "antivpn"; + } + + @Override + public Command[] children() { + return new Command[0]; + } + + @Override + public String execute(CommandExecutor executor, String[] args) { + Optional pgetter = executor.getPlayer(); + if(!pgetter.isPresent()) return "&cYou must be a player to execute this command!"; + + APIPlayer player = pgetter.get(); + + if(player.isAlertsEnabled()) { + player.setAlertsEnabled(false); + return "&7You have set your AntiVPN alerts to: &coff"; + } else { + player.setAlertsEnabled(true); + return "&7You have set your AntiVPN alerts to: &aon"; + } + } + + @Override + public List tabComplete(CommandExecutor executor, String alias, String[] args) { + return Collections.emptyList(); + } +} diff --git a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java index b4794f4..dad10f8 100644 --- a/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java +++ b/Common/src/main/java/dev/brighten/antivpn/command/impl/AntiVPNCommand.java @@ -41,7 +41,7 @@ public class AntiVPNCommand extends Command { @Override public Command[] children() { - return new Command[] {new LookupCommand(), new AllowlistCommand()}; + return new Command[] {new LookupCommand(), new AllowlistCommand(), new AlertsCommand()}; } @Override