    001package net.minecraft.server.dedicated;
    002
    003import java.io.BufferedReader;
    004import java.io.File;
    005import java.io.FileReader;
    006import java.io.FileWriter;
    007import java.io.PrintWriter;
    008import java.util.Iterator;
    009import net.minecraft.server.MinecraftServer;
    010import net.minecraft.server.management.ServerConfigurationManager;
    011
    012public class DedicatedPlayerList extends ServerConfigurationManager
    013{
    014    private File opsList;
    015    private File whiteList;
    016
    017    public DedicatedPlayerList(DedicatedServer par1DedicatedServer)
    018    {
    019        super(par1DedicatedServer);
    020        this.opsList = par1DedicatedServer.getFile("ops.txt");
    021        this.whiteList = par1DedicatedServer.getFile("white-list.txt");
    022        this.viewDistance = par1DedicatedServer.getIntProperty("view-distance", 10);
    023        this.maxPlayers = par1DedicatedServer.getIntProperty("max-players", 20);
    024        this.setWhiteListEnabled(par1DedicatedServer.getBooleanProperty("white-list", false));
    025
    026        if (!par1DedicatedServer.isSinglePlayer())
    027        {
    028            this.getBannedPlayers().setListActive(true);
    029            this.getBannedIPs().setListActive(true);
    030        }
    031
    032        this.getBannedPlayers().loadBanList();
    033        this.getBannedPlayers().saveToFileWithHeader();
    034        this.getBannedIPs().loadBanList();
    035        this.getBannedIPs().saveToFileWithHeader();
    036        this.loadOpsList();
    037        this.readWhiteList();
    038        this.saveOpsList();
    039
    040        if (!this.whiteList.exists())
    041        {
    042            this.saveWhiteList();
    043        }
    044    }
    045
    046    public void setWhiteListEnabled(boolean par1)
    047    {
    048        super.setWhiteListEnabled(par1);
    049        this.getDedicatedServerInstance().setProperty("white-list", Boolean.valueOf(par1));
    050        this.getDedicatedServerInstance().saveProperties();
    051    }
    052
    053    /**
    054     * This adds a username to the ops list, then saves the op list
    055     */
    056    public void addOp(String par1Str)
    057    {
    058        super.addOp(par1Str);
    059        this.saveOpsList();
    060    }
    061
    062    /**
    063     * This removes a username from the ops list, then saves the op list
    064     */
    065    public void removeOp(String par1Str)
    066    {
    067        super.removeOp(par1Str);
    068        this.saveOpsList();
    069    }
    070
    071    /**
    072     * Remove the specified player from the whitelist.
    073     */
    074    public void removeFromWhitelist(String par1Str)
    075    {
    076        super.removeFromWhitelist(par1Str);
    077        this.saveWhiteList();
    078    }
    079
    080    /**
    081     * Add the specified player to the white list.
    082     */
    083    public void addToWhiteList(String par1Str)
    084    {
    085        super.addToWhiteList(par1Str);
    086        this.saveWhiteList();
    087    }
    088
    089    /**
    090     * Either does nothing, or calls readWhiteList.
    091     */
    092    public void loadWhiteList()
    093    {
    094        this.readWhiteList();
    095    }
    096
    097    private void loadOpsList()
    098    {
    099        try
    100        {
    101            this.getOps().clear();
    102            BufferedReader bufferedreader = new BufferedReader(new FileReader(this.opsList));
    103            String s = "";
    104
    105            while ((s = bufferedreader.readLine()) != null)
    106            {
    107                this.getOps().add(s.trim().toLowerCase());
    108            }
    109
    110            bufferedreader.close();
    111        }
    112        catch (Exception exception)
    113        {
    114            this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to load operators list: " + exception);
    115        }
    116    }
    117
    118    private void saveOpsList()
    119    {
    120        try
    121        {
    122            PrintWriter printwriter = new PrintWriter(new FileWriter(this.opsList, false));
    123            Iterator iterator = this.getOps().iterator();
    124
    125            while (iterator.hasNext())
    126            {
    127                String s = (String)iterator.next();
    128                printwriter.println(s);
    129            }
    130
    131            printwriter.close();
    132        }
    133        catch (Exception exception)
    134        {
    135            this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to save operators list: " + exception);
    136        }
    137    }
    138
    139    private void readWhiteList()
    140    {
    141        try
    142        {
    143            this.getWhiteListedPlayers().clear();
    144            BufferedReader bufferedreader = new BufferedReader(new FileReader(this.whiteList));
    145            String s = "";
    146
    147            while ((s = bufferedreader.readLine()) != null)
    148            {
    149                this.getWhiteListedPlayers().add(s.trim().toLowerCase());
    150            }
    151
    152            bufferedreader.close();
    153        }
    154        catch (Exception exception)
    155        {
    156            this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to load white-list: " + exception);
    157        }
    158    }
    159
    160    private void saveWhiteList()
    161    {
    162        try
    163        {
    164            PrintWriter printwriter = new PrintWriter(new FileWriter(this.whiteList, false));
    165            Iterator iterator = this.getWhiteListedPlayers().iterator();
    166
    167            while (iterator.hasNext())
    168            {
    169                String s = (String)iterator.next();
    170                printwriter.println(s);
    171            }
    172
    173            printwriter.close();
    174        }
    175        catch (Exception exception)
    176        {
    177            this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to save white-list: " + exception);
    178        }
    179    }
    180
    181    /**
    182     * Determine if the player is allowed to connect based on current server settings.
    183     */
    184    public boolean isAllowedToLogin(String par1Str)
    185    {
    186        par1Str = par1Str.trim().toLowerCase();
    187        return !this.isWhiteListEnabled() || this.areCommandsAllowed(par1Str) || this.getWhiteListedPlayers().contains(par1Str);
    188    }
    189
    190    public DedicatedServer getDedicatedServerInstance()
    191    {
    192        return (DedicatedServer)super.getServerInstance();
    193    }
    194
    195    public MinecraftServer getServerInstance()
    196    {
    197        return this.getDedicatedServerInstance();
    198    }
    199}