package me.ryanhamshire.PopulationDensity; import org.bukkit.entity.Minecart; import org.bukkit.entity.Player; public class AfkCheckTask implements Runnable { private Player player; private PlayerData playerData; public AfkCheckTask(Player player, PlayerData playerData) { this.player = player; this.playerData = playerData; } @Override public void run() { if(!player.isOnline()) return; boolean kick = false; //if the player is and has been in a minecart, kick him if(player.getVehicle() instanceof Minecart) { if(playerData.wasInMinecartLastRound) { kick = true; } playerData.wasInMinecartLastRound = true; } else { playerData.wasInMinecartLastRound = false; } //if the player hasn't moved, kick him try { if(playerData.lastObservedLocation != null && (playerData.lastObservedLocation.distance(player.getLocation()) < 3)) { kick = true; } } catch(IllegalArgumentException exception){} int playersOnline = PopulationDensity.instance.getServer().getOnlinePlayers().size(); if(!player.hasPermission("populationdensity.idle") && kick && (PopulationDensity.bootingIdlePlayersForLag || PopulationDensity.instance.getServer().getMaxPlayers() - PopulationDensity.instance.reservedSlotsForAdmins - 3 <= playersOnline)) { PopulationDensity.AddLogEntry("Kicked " + player.getName() + " for idling."); player.kickPlayer("Kicked for idling, to make room for active players."); return; } playerData.lastObservedLocation = player.getLocation(); //otherwise, restart the timer for this task //20L ~ 1 second playerData.afkCheckTaskID = PopulationDensity.instance.getServer().getScheduler().scheduleSyncDelayedTask(PopulationDensity.instance, this, 20L * 60 * PopulationDensity.instance.maxIdleMinutes); } }