2015年9月1日 星期二

Minecraft 水桶插件(踢出不是你登入的電腦IP) OpenScource

import java.text.SimpleDateFormat;
import java.util.Date;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class Check extends JavaPlugin implements Listener {
 public static FileConfiguration c;
 
 public void onEnable(){
  getServer().getPluginManager().registerEvents(this, this);
  c = getConfig();
  c.addDefault("kick", false);
  c.options().copyDefaults(true);
  saveConfig();
  Bukkit.getServer().getLogger().info("[PiratedCheck] 初始化完成");
  
  getServer().getScheduler().runTaskTimer(this, new Runnable(){
   @Override
   public void run() {
    saveConfig();
   }
  }, 0L, 12000L);
 }
 
 public void onDisable(){
  Bukkit.getServer().getLogger().info("[PiratedCheck] 插件關閉");
  saveConfig();
 }
 
 public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  CommandSender p = sender;
  if(sender.hasPermission("Pirated.admin")){
   if(args.length == 0){
    Help(p);
   }else if(args.length == 1){
    if(args[0].equalsIgnoreCase("Reload")){
      reloadConfig();
      p.sendMessage("§a重載完成");
    }else if(args[0].equalsIgnoreCase("clear")){
     c.set("Log." + sender.getName(), null);
     p.sendMessage("§a巳清除可疑的Ip記錄");
     return true;
    }else{
     Help(p);
    }
   }else if(args.length == 2){
    if(args[0].equalsIgnoreCase("Ip")){
     if(c.get("Player." + args[1]) != null){
      p.sendMessage("§aIP " + c.getString("Player." + args[1]));
     }else{
      p.sendMessage("§a查不到此玩家");
     }
    }else if(args[0].equalsIgnoreCase("Reset")){
     c.set("Player." + args[1], null);
     c.set("Log." + args[1], null);
     p.sendMessage("§a重設完成");
    }else if(args[0].equalsIgnoreCase("clear")){
     c.set("Log." + args[1], null);
     p.sendMessage("§a巳經清除 " + args[1] + " 可疑的Ip記錄");
    }else if(args[0].equalsIgnoreCase("kick")){
     if(args[1].equalsIgnoreCase("true")){
      c.set("kick", true);
     }else if(args[1].equalsIgnoreCase("false")){
      c.set("kick", false);
     }else{
      p.sendMessage("§a/check kick [true|false]");
     }
    }else{
     Help(p);
    }
   }
   saveConfig();
   return true;
  }if(args.length == 1){
   if(args[0].equalsIgnoreCase("clear")){
    c.set("Log." + sender.getName(), null);
    p.sendMessage("§a巳清除可疑的Ip記錄");
    return true;
   }
  }
  return false;
 }
 
 @EventHandler
 public void onPlayerJoinEvent(PlayerJoinEvent e){
  String ip = e.getPlayer().getAddress().getHostString();
  if(c.get("Player." + e.getPlayer().getName()) == null){
   new BukkitRunnable(){
    public void run(){
     if(e.getPlayer().isOnline()){
      c.set("Player." + e.getPlayer().getName(), ip);
      e.getPlayer().sendMessage("§a已儲存你的IP地置以作防盜之用");
      saveConfig();
     }
    }
   }.runTaskLater(this, 1200);
  }else if(c.getString("Player." + e.getPlayer().getName()).equals(ip)){
   if(c.get("Log." + e.getPlayer().getName()) != null){
    e.getPlayer().sendMessage("§a在其他地方曾經登入--");
    e.getPlayer().sendMessage(c.getString("Log." + e.getPlayer().getName()));
    e.getPlayer().sendMessage("§a\n如果你更換電腦而轉換Ip\n請聯絡管理員跟進\n使用/check clear 清除可疑的Ip記錄");
   }
  }else{
   if(c.getBoolean("kick") == true){
    e.getPlayer().kickPlayer("你使用不是平常登入的Ip而被§4踢出§f\n如你認為有誤請聯絡§4管理員");
   }else{
    e.getPlayer().sendMessage("§a你使用不是平常登入的Ip登入\n你的登入將會被記錄\n如你認為有誤請聯絡管理員");
   }
   String str = "";
   if(c.get("Log." + e.getPlayer().getName()) != null){
    str = c.getString("Log." + e.getPlayer().getName()) + "\n";
    str = str + new SimpleDateFormat("MM月dd日 HH:mm").format(new Date()) + " 從Ip:" + ip + "登入你的帳號";
   }else{
    str = new SimpleDateFormat("MM月dd日 HH:mm").format(new Date()) + " 從Ip:" + ip + "登入你的帳號";
   }
   c.set("Log." + e.getPlayer().getName(), str);
  }
 }
 
 public void Help(CommandSender p){
  p.sendMessage("§a----- §6PiratedCheck 幫助  §a-----");
  p.sendMessage("§a/check ip <Player> §f- 查看玩家經常使用的Ip");
  p.sendMessage("§a/check reset <Player> §f- 重設玩家的所有Ip記錄");
  p.sendMessage("§a/check clear <Player> §f- 清除可疑的Ip記錄");
  p.sendMessage("§a/check kick [true|false] §f- 設定是否因不同Ip登入而踢出");
  p.sendMessage("§a/check reload §f- 重載插件");
 }

}