package fr.Alphart.BAT.Modules.Ban; import fr.Alphart.BAT.BAT; import fr.Alphart.BAT.Modules.IModule; import fr.Alphart.BAT.database.DataSourceHandler; import fr.Alphart.BAT.database.SQLQueries; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Arrays; import java.util.List; /** * This task handle the tempban's state update. */ public class BanExpirationTask implements Runnable { private final Ban ban; public BanExpirationTask(final Ban ban) { this.ban = ban; } @Override public void run() { Statement statement = null; try (Connection conn = BAT.getConnection()) { statement = conn.createStatement(); if (DataSourceHandler.isSQLite()) { statement.executeUpdate(SQLQueries.Ban.SQLite.updateExpiredBan); } else { statement.executeUpdate(SQLQueries.Ban.updateExpiredBan); } statement.close(); } catch (final SQLException e) { DataSourceHandler.handleException(e); } finally { DataSourceHandler.close(statement); } // Check if the online players are banned (if modifications have been made from the WebInterface) for(final ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){ final List<String> serversToCheck; if(player.getServer() != null){ serversToCheck = Arrays.asList(player.getServer().getInfo().getName(), IModule.GLOBAL_SERVER); }else{ serversToCheck = Arrays.asList(IModule.GLOBAL_SERVER); } for(final String server : serversToCheck){ if(ban.isBan(player, server)){ if (server.equals(player.getPendingConnection().getListener().getDefaultServer()) || server.equals(IModule.GLOBAL_SERVER)) { player.disconnect(ban.getBanMessage(player.getPendingConnection(), server)); continue; } player.sendMessage(ban.getBanMessage(player.getPendingConnection(), server)); player.connect(ProxyServer.getInstance().getServerInfo(player.getPendingConnection().getListener().getDefaultServer())); } } } } }