package FTSP.main;
import java.util.Map.Entry;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import net.milkbowl.vault.economy.Economy;
public class FTSP extends JavaPlugin implements Listener{
public HashMap<String, HashMap<String, String>> reports = new HashMap<String, HashMap<String, String>>();
public HashMap<String, Integer> toBan = new HashMap<String, Integer>();
public Integer[] stars = {1,2,4,8,0};
public static Economy economy;
public void onEnable() {
economy = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
getConfig().options().copyDefaults();
saveDefaultConfig();
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void quit(PlayerQuitEvent e) {
Player p = e.getPlayer();
if(reports.containsKey(p.getName())) {
reports.remove(p.getName());
}
if(checkReport(p.getName())) {
Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" вышел и получил бан!");
}
}
@EventHandler
public void death(PlayerDeathEvent e) {
Player p = e.getEntity().getPlayer();
Player k = e.getEntity().getKiller();
if(reports.containsKey(p.getName())) {
reports.remove(p.getName());
}
if(checkReport(p.getName())) {
if(k!=null) {
Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" был убит игроком "+ChatColor.GOLD+k.getName()+" и получил бан!");
} else {
Bukkit.broadcastMessage("Игрок "+ChatColor.RED+p.getName()+ChatColor.WHITE+" умер и получил бан!");
}
}
}
private boolean checkReport(String player) {
if(toBan.containsKey(player)) {
Date banDate = new Date(System.currentTimeMillis()+stars[toBan.get(player)]*60*60*1000);
if(stars[toBan.get(player)]==0) { banDate = null; }
Bukkit.getBanList(BanList.Type.NAME).addBan(player, null, banDate, null);
Bukkit.getPlayer(player).kickPlayer(null);
toBan.remove(player);
return true;
}
return false;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player from = (Player) sender;
if(cmd.getName().equals("report")) {
if(args.length<1) { return false; }
if(args[0]=="send") {
if(args.length<2) { return false; }
String player = args[1];
if(!from.hasPermission("FTSP.report.send")) { return true; }
String desc = "";
if(args.length>2) {
desc = String.join(" ", Arrays.copyOfRange(args, 2, args.length));
}
HashMap<String, String> tmp = new HashMap<String, String>();
tmp.put("from", from.getName());
tmp.put("desc", desc);
reports.put(player, tmp);
String report_notify = "";
report_notify += ChatColor.RED + "[ЖАЛОБА] ";
report_notify += ChatColor.GOLD + from.getName() + " -> " + player + "\n";
report_notify += ChatColor.YELLOW + desc;
Bukkit.broadcast(report_notify, "FTSP.report.look");
return true;
} else if(args[0]=="list") {
if(!from.hasPermission("FTSP.report.list")) { return true; }
String list = ChatColor.GREEN + "Список отправленных репортов:";
for(Entry<String, HashMap<String, String>> player1 : reports.entrySet()) {
list += "\n\n";
list += ChatColor.GOLD + player1.getValue().get("from") + " -> " + player1.getKey();
list += ChatColor.WHITE + " " + player1.getValue().get("desc");
}
sender.sendMessage(list);
return true;
} else if(args[0]=="accept") {
if(args.length<2) { return false; }
String player = args[1];
if(!from.hasPermission("FTSP.report.accept")) { from.sendMessage("AAA"); return true; }
if(args.length!=3) { return false; }
try {
Integer star = Integer.parseInt(args[2]);
reports.remove(player);
toBan.put(player, star);
Bukkit.broadcastMessage("Игрок "+ChatColor.RED+player+ChatColor.WHITE+" объявлен в розыск! Уровень опастности: "+star);
} catch (Exception e) { return false; }
return true;
} else {
return false;
}
}
return false;
}
}