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 net.minecraft.server.MinecraftServer;
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 iterator = this.theBanList.values().iterator();
while (iterator.hasNext())
{
BanEntry banentry = (BanEntry)iterator.next();
if (banentry.hasBanExpired())
{
iterator.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 bufferedreader;
try
{
bufferedreader = new BufferedReader(new FileReader(this.fileName));
}
catch (FileNotFoundException filenotfoundexception)
{
throw new Error();
}
String s;
try
{
while ((s = bufferedreader.readLine()) != null)
{
if (!s.startsWith("#"))
{
BanEntry banentry = BanEntry.parse(s);
if (banentry != null)
{
this.theBanList.putLower(banentry.getBannedUsername(), banentry);
}
}
}
}
catch (IOException ioexception)
{
MinecraftServer.getServer().getLogAgent().logSevereException("Could not load ban list", ioexception);
}
}
}
public void saveToFileWithHeader()
{
this.saveToFile(true);
}
/**
* par1: include header
*/
public void saveToFile(boolean par1)
{
this.removeExpiredBans();
try
{
PrintWriter printwriter = new PrintWriter(new FileWriter(this.fileName, false));
if (par1)
{
printwriter.println("# Updated " + (new SimpleDateFormat()).format(new Date()) + " by Minecraft " + "1.5.2");
printwriter.println("# victim name | ban date | banned by | banned until | reason");
printwriter.println();
}
Iterator iterator = this.theBanList.values().iterator();
while (iterator.hasNext())
{
BanEntry banentry = (BanEntry)iterator.next();
printwriter.println(banentry.buildBanString());
}
printwriter.close();
}
catch (IOException ioexception)
{
MinecraftServer.getServer().getLogAgent().logSevereException("Could not save ban list", ioexception);
}
}
}