diff --git a/src/main/java/fr/communaywen/core/AywenCraftPlugin.java b/src/main/java/fr/communaywen/core/AywenCraftPlugin.java index 876a4d61..8091f7c9 100644 --- a/src/main/java/fr/communaywen/core/AywenCraftPlugin.java +++ b/src/main/java/fr/communaywen/core/AywenCraftPlugin.java @@ -150,6 +150,7 @@ public void onEnable() { getServer().getPluginManager().registerEvents(new ChatListener(this, discordWebhook), this); getServer().getPluginManager().registerEvents(new FreezeListener(this), this); getServer().getPluginManager().registerEvents(new WelcomeMessage(loadWelcomeMessageConfig()), this); + getServer().getPluginManager().registerEvents(new VpnListener(this), this); /* --------- */ saveDefaultConfig(); diff --git a/src/main/java/fr/communaywen/core/listeners/VpnListener.java b/src/main/java/fr/communaywen/core/listeners/VpnListener.java new file mode 100644 index 00000000..a29a7a20 --- /dev/null +++ b/src/main/java/fr/communaywen/core/listeners/VpnListener.java @@ -0,0 +1,74 @@ +package fr.communaywen.core.listeners; + +import fr.communaywen.core.AywenCraftPlugin; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class VpnListener implements Listener { + + private final AywenCraftPlugin plugin; + + public VpnListener(AywenCraftPlugin plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerLogin(PlayerLoginEvent event) { + + Player player = event.getPlayer(); + + if (player.hasPermission("aywencraft.antivpn.bypass")) { + return; + } + + String ip = event.getAddress().getHostAddress(); + new BukkitRunnable() { + @Override + public void run() { + try { + URL url = new URL("http://ip-api.com/json/" + ip + "?fields=proxy"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + + in.close(); + connection.disconnect(); + + String response = content.toString(); + if (response.contains("\"proxy\":true")) { + Bukkit.getScheduler().runTask(plugin, () -> { + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + "§l§cOpenMc - Sécuritée\n" + + "§l§eConnexion Non Permise !§r\n" + + "§6Vous essayez actuellement de vous connecter au serveur\n" + + "§6avec un vpn ou un proxy.\n" + + "§3Merci de le désactiver et de réessayer\n" + + "§cSi vous pensez qu'il s'agit d'une erreur, vous pouvez\n" + + "§cavoir de l'assistance sur discord.gg/aywen"); + Bukkit.broadcast(ChatColor.YELLOW + event.getPlayer().getName() + " a essayé de se connecter mais il avait un vpn.", + "aywencraft.antivpn.notification"); + }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }.runTaskAsynchronously(plugin); + } +} \ No newline at end of file diff --git a/src/main/java/fr/communaywen/core/staff/freeze/FreezeCommand.java b/src/main/java/fr/communaywen/core/staff/freeze/FreezeCommand.java index 28d1edbb..797c1ca1 100644 --- a/src/main/java/fr/communaywen/core/staff/freeze/FreezeCommand.java +++ b/src/main/java/fr/communaywen/core/staff/freeze/FreezeCommand.java @@ -52,7 +52,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } plugin.getFrozenPlayers().add(target.getUniqueId()); - target.sendTitle(ChatColor.RED + "Vous êtes freeze !", ChatColor.YELLOW + "Regardez votre chat", 10, 70, 20); + target.sendTitle(ChatColor.RED + "Vous êtes freeze !", ChatColor.YELLOW + "Regardez votre chat", 10, 1000, 20); target.sendMessage(ChatColor.RED + "Vous êtes Freeze, si vous déconnectez, vous serez banni !"); player.sendMessage(ChatColor.GREEN + target.getName() + " a bien été freeze."); return true; diff --git a/src/main/java/fr/communaywen/core/staff/freeze/FreezeListener.java b/src/main/java/fr/communaywen/core/staff/freeze/FreezeListener.java index 5a7d79ad..a325957f 100644 --- a/src/main/java/fr/communaywen/core/staff/freeze/FreezeListener.java +++ b/src/main/java/fr/communaywen/core/staff/freeze/FreezeListener.java @@ -37,7 +37,7 @@ public void onPlayerQuit(PlayerQuitEvent event) { if (plugin.getFrozenPlayers().contains(playerUUID)) { int banDurationDays = plugin.getBanDuration(); Date banDuration = new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(banDurationDays)); - Bukkit.getBanList(BanList.Type.NAME).addBan(player.getName(), "Vous avez été banni pour déconnexion en étant freeze pandant ", banDuration, "Anti Déco Freeze"); + Bukkit.getBanList(BanList.Type.NAME).addBan(player.getName(), "Déconnexion en étant freeze !", banDuration, "Anti Déco Freeze"); plugin.getFrozenPlayers().remove(playerUUID); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 78fa1d66..ee5b2e09 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -76,7 +76,7 @@ permissions: default: true ayw.command.rtp: description: 'rtp' - default: false + default: true ayw.command.feed: description: 'feed' default: true @@ -86,6 +86,12 @@ permissions: openmc.staff.freeze: description: 'Ensemble de commandes pour freeze un joueur' default: false + aywencraft.antivpn.notification: + description: 'Permission to receive VPN connection notifications' + default: op + aywencraft.antivpn.bypass: + description: 'Permission to bypass VPN check' + default: false ayw.command.spawn: description: 'spawn' default: true