Package com.github.zathrus_writer.commandsex.api.afk

Source Code of com.github.zathrus_writer.commandsex.api.afk.Afk

package com.github.zathrus_writer.commandsex.api.afk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

import com.github.zathrus_writer.commandsex.CommandsEX;
import com.github.zathrus_writer.commandsex.helpers.LogHelper;

public class Afk {
  private static int idleTime = CommandsEX.getConf().getInt("afk.idleTime");
  private static boolean kickEnabled = CommandsEX.getConf().getBoolean("afk.kick.enabled");
  private static int kickTime = CommandsEX.getConf().getInt("afk.kick.time");
  private static String kickMessage = ChatColor.translateAlternateColorCodes("&".charAt(0), CommandsEX.getConf().getString("afk.kick.message"));
 
  private static HashMap<String, Long> playerIdleTime = new HashMap<String, Long>();
  private static List<String> afkPlayers = new ArrayList<String>();
 
  public static void toggleAfk(Player player){
    if (afkPlayers.contains(player)){
      setNotAfk(player, false);
    } else {
      setAfk(player, false);
    }
  }
 
  public static void setAfk(Player player, boolean silent){
    if (!afkPlayers.contains(player)){
      PlayerAfkToggleEvent e = new PlayerAfkToggleEvent(player, true);
      Bukkit.getServer().getPluginManager().callEvent(e);
      String pName = player.getName();
     
      if (!e.isCancelled()){
        afkPlayers.add(pName);
        if (!silent){
          for (Player p : Bukkit.getOnlinePlayers()){
            LogHelper.showInfo("[" + pName + " #####afkIsNowAfk", p);
          }
        }
      }
    }
  }
 
  public static void setNotAfk(Player player, boolean silent){
    String pName = player.getName();
   
    if (afkPlayers.contains(pName)){
      PlayerAfkToggleEvent e = new PlayerAfkToggleEvent(player, false);
      Bukkit.getServer().getPluginManager().callEvent(e);
     
      if (!e.isCancelled()){
        afkPlayers.remove(pName);
        resetPlayerIdleTime(pName);
       
        if (!silent){
          for (Player p : Bukkit.getOnlinePlayers()){
            LogHelper.showInfo("[" + pName + " #####afkIsNoLongerAfk", p);
          }
        }
      }
    }
  }
 
  public static boolean getAfkStatus(String player){
    return afkPlayers.contains(player);
  }
 
  public static long getPlayerAfkTimeInMillis(String player){
    return (playerIdleTime.containsKey(player) ? playerIdleTime.get(player) : -1);
  }
 
  public static void checkPlayerIdleTimes(){
    Iterator<String> it = playerIdleTime.keySet().iterator();
    while (it.hasNext()){
      String player = it.next();
      Player p = Bukkit.getPlayerExact(player);
      if (p == null){
        continue;
      }
     
      if (kickEnabled && p.hasPermission("cex.afk.kick") && (System.currentTimeMillis() - playerIdleTime.get(player)) / 1000 >= kickTime){
        p.kickPlayer(kickMessage);
       
        // send the kick message to each player in their own language
        for (Player pl : Bukkit.getOnlinePlayers()){
          LogHelper.showWarning("[" + ChatColor.RED + player + " #####afkKickNotify", pl);
        }
      } else if ((System.currentTimeMillis() - playerIdleTime.get(player)) / 1000 >= idleTime){
        setAfk(p, false);
      }
    }
  }
 
  public static void resetPlayerIdleTime(String player){
    Player p = Bukkit.getPlayerExact(player);
   
    if (p != null && p.hasPermission("cex.afk.auto")){
      if (playerIdleTime.containsKey(player)){
        playerIdleTime.remove(player);
      }
     
      if (afkPlayers.contains(player)){
        setNotAfk(p, false);
      }
     
      playerIdleTime.put(player, System.currentTimeMillis());
    }
  }
 
  public static void removeAfkRecords(String player){
    if (afkPlayers.contains(player)){
      afkPlayers.remove(player);
    }
   
    if (playerIdleTime.containsKey(player)){
      playerIdleTime.remove(player);
    }
  }
 
  public static int getIdleTimeToAfk(){
    return idleTime;
  }
 
  public static int getTimeToKick(){
    return kickTime;
  }
 
  public static boolean isKickEnabled(){
    return kickEnabled;
  }
 
  public static String getKickMessage(){
    return kickMessage;
  }
 
}
TOP

Related Classes of com.github.zathrus_writer.commandsex.api.afk.Afk

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.