package net.minecraft.server.management;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
public class BanList
{
private final LowerStringMap theBanList = new LowerStringMap();
private final File fileName;
/** set to true if not singlePlayer */
private boolean listActive = true;
public BanList(File par1File)
{
this.fileName = par1File;
}
public boolean isListActive()
{
return this.listActive;
}
public void setListActive(boolean par1)
{
this.listActive = par1;
}
/**
* removes expired Bans before returning
*/
public Map getBannedList()
{
this.removeExpiredBans();
return this.theBanList;
}
public boolean isBanned(String par1Str)
{
if (!this.isListActive())
{
return false;
}
else
{
this.removeExpiredBans();
return this.theBanList.containsKey(par1Str);
}
}
public void put(BanEntry par1BanEntry)
{
this.theBanList.putLower(par1BanEntry.getBannedUsername(), par1BanEntry);
this.saveToFileWithHeader();
}
public void remove(String par1Str)
{
this.theBanList.remove(par1Str);
this.saveToFileWithHeader();
}
public void removeExpiredBans()
{
Iterator var1 = this.theBanList.values().iterator();
while (var1.hasNext())
{
BanEntry var2 = (BanEntry)var1.next();
if (var2.hasBanExpired())
{
var1.remove();
}
}
}
/**
* Loads the ban list from the file (adds every entry, does not clear the current list).
*/
public void loadBanList()
{
if (this.fileName.isFile())
{
BufferedReader var1;
try
{
var1 = new BufferedReader(new FileReader(this.fileName));
}
catch (FileNotFoundException var4)
{
throw new Error();
}
String var2;
try
{
while ((var2 = var1.readLine()) != null)
{
if (!var2.startsWith("#"))
{
BanEntry var3 = BanEntry.parse(var2);
if (var3 != null)
{
this.theBanList.putLower(var3.getBannedUsername(), var3);
}
}
}
}
catch (IOException var5)
{
Logger.getLogger("Minecraft").log(Level.SEVERE, "Could not load ban list", var5);
}
}
}
public void saveToFileWithHeader()
{
this.saveToFile(true);
}
/**
* par1: include header
*/
public void saveToFile(boolean par1)
{
this.removeExpiredBans();
try
{
PrintWriter var2 = new PrintWriter(new FileWriter(this.fileName, false));
if (par1)
{
var2.println("# Updated " + (new SimpleDateFormat()).format(new Date()) + " by Minecraft " + "1.4.7");
var2.println("# victim name | ban date | banned by | banned until | reason");
var2.println();
}
Iterator var3 = this.theBanList.values().iterator();
while (var3.hasNext())
{
BanEntry var4 = (BanEntry)var3.next();
var2.println(var4.buildBanString());
}
var2.close();
}
catch (IOException var5)
{
Logger.getLogger("Minecraft").log(Level.SEVERE, "Could not save ban list", var5);
}
}
}