mirror of
https://github.com/funkemunky/AntiVPN.git
synced 2026-06-04 10:52:20 +00:00
Fixing bug that prevented players from getting kicked and fixes alerts not being populated
This commit is contained in:
@@ -3,13 +3,16 @@ package dev.brighten.antivpn.bukkit;
|
||||
import dev.brighten.antivpn.AntiVPN;
|
||||
import dev.brighten.antivpn.api.APIPlayer;
|
||||
import dev.brighten.antivpn.api.VPNExecutor;
|
||||
import lombok.val;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
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.PlayerLoginEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
@@ -43,47 +46,45 @@ public class BukkitListener extends VPNExecutor implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onListener(final AsyncPlayerPreLoginEvent event) {
|
||||
public void onListener(final PlayerLoginEvent event) {
|
||||
//If they're exempt, don't check.
|
||||
if(AntiVPN.getInstance().getExecutor().isWhitelisted(event.getUniqueId())) return;
|
||||
if(AntiVPN.getInstance().getExecutor().isWhitelisted(event.getPlayer().getUniqueId())) return;
|
||||
checkIp(event.getAddress().getHostAddress(), AntiVPN.getInstance().getConfig().cachedResults(), result -> {
|
||||
if(result.isSuccess() && result.isProxy()) {
|
||||
if(AntiVPN.getInstance().getConfig().kickPlayersOnDetect()) {
|
||||
event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER);
|
||||
event.setKickMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
AntiVPN.getInstance().getConfig().getKickString()));
|
||||
}
|
||||
Optional.ofNullable(Bukkit.getPlayer(event.getUniqueId())).ifPresent(player -> {
|
||||
new BukkitRunnable() {
|
||||
public void run() {
|
||||
if(!player.hasPermission("antivpn.bypass") //Has bypass permission
|
||||
//Or has a name that starts with a certain prefix. This is for Bedrock exempting.
|
||||
|| AntiVPN.getInstance().getConfig().getPrefixWhitelists().stream()
|
||||
.anyMatch(prefix -> player.getName().startsWith(prefix))) {
|
||||
if (AntiVPN.getInstance().getConfig().kickPlayersOnDetect())
|
||||
player.kickPlayer(ChatColor.translateAlternateColorCodes('&',
|
||||
AntiVPN.getInstance().getConfig().getKickString()));
|
||||
new BukkitRunnable() {
|
||||
public void run() {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
//Ensuring the user wishes to alert to staff
|
||||
if(AntiVPN.getInstance().getConfig().alertToStaff())
|
||||
AntiVPN.getInstance().getPlayerExecutor().getOnlinePlayers().stream()
|
||||
.filter(APIPlayer::isAlertsEnabled)
|
||||
.forEach(pl -> pl.sendMessage(AntiVPN.getInstance().getConfig()
|
||||
.alertMessage()));
|
||||
if(!player.hasPermission("antivpn.bypass") //Has bypass permission
|
||||
//Or has a name that starts with a certain prefix. This is for Bedrock exempting.
|
||||
|| AntiVPN.getInstance().getConfig().getPrefixWhitelists().stream()
|
||||
.anyMatch(prefix -> player.getName().startsWith(prefix))) {
|
||||
if (AntiVPN.getInstance().getConfig().kickPlayersOnDetect())
|
||||
player.kickPlayer(ChatColor.translateAlternateColorCodes('&',
|
||||
AntiVPN.getInstance().getConfig().getKickString()));
|
||||
|
||||
//In case the user wants to run their own commands instead of using the built in kicking
|
||||
if(AntiVPN.getInstance().getConfig().runCommands())
|
||||
//Ensuring the user wishes to alert to staff
|
||||
if(AntiVPN.getInstance().getConfig().alertToStaff())
|
||||
AntiVPN.getInstance().getPlayerExecutor().getOnlinePlayers().stream()
|
||||
.filter(APIPlayer::isAlertsEnabled)
|
||||
.forEach(pl -> pl.sendMessage(AntiVPN.getInstance().getConfig()
|
||||
.alertMessage().replace("%player%", event.getPlayer().getName())
|
||||
.replace("%reason%", result.getMethod())
|
||||
.replace("%country%", result.getCountryName())
|
||||
.replace("%city%", result.getCity())));
|
||||
|
||||
//In case the user wants to run their own commands instead of using the built in kicking
|
||||
if(AntiVPN.getInstance().getConfig().runCommands())
|
||||
for (String command : AntiVPN.getInstance().getConfig().commands()) {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(),
|
||||
ChatColor.translateAlternateColorCodes('&',
|
||||
command.replace("%player%", event.getName())));
|
||||
command.replace("%player%", event.getPlayer().getName())));
|
||||
}
|
||||
}
|
||||
Bukkit.getLogger().info(player.getPlayer().getName()
|
||||
+ " joined on a VPN/Proxy (" + result.getMethod() + ")");
|
||||
}
|
||||
}.runTask(BukkitPlugin.pluginInstance);
|
||||
});
|
||||
Bukkit.getLogger().info(player.getPlayer().getName()
|
||||
+ " joined on a VPN/Proxy (" + result.getMethod() + ")");
|
||||
}
|
||||
}.runTask(BukkitPlugin.pluginInstance);
|
||||
} else if(!result.isSuccess()) {
|
||||
Bukkit.getLogger().log(Level.WARNING,
|
||||
"The API query was not a success! " +
|
||||
|
||||
@@ -6,13 +6,13 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BukkitPlayerExecutor implements PlayerExecutor {
|
||||
|
||||
private final Map<Player, BukkitPlayer> cachedPlayers = new WeakHashMap<>();
|
||||
|
||||
@Override
|
||||
public Optional<APIPlayer> getPlayer(String name) {
|
||||
final Player player = Bukkit.getPlayer(name);
|
||||
@@ -21,7 +21,7 @@ public class BukkitPlayerExecutor implements PlayerExecutor {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
return Optional.of(new BukkitPlayer(player));
|
||||
return Optional.of(cachedPlayers.computeIfAbsent(player, BukkitPlayer::new));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,13 +32,15 @@ public class BukkitPlayerExecutor implements PlayerExecutor {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
return Optional.of(new BukkitPlayer(player));
|
||||
return Optional.of(cachedPlayers.computeIfAbsent(player, BukkitPlayer::new));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<APIPlayer> getOnlinePlayers() {
|
||||
return Bukkit.getOnlinePlayers().stream().map(BukkitPlayer::new).collect(Collectors.toList());
|
||||
return Bukkit.getOnlinePlayers().stream()
|
||||
.map(pl -> cachedPlayers.computeIfAbsent(pl, BukkitPlayer::new))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user