package net.minecraft.server.dedicated;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SideOnly(Side.SERVER)
public class PropertyManager
{
private static final Logger LOGGER = LogManager.getLogger();
/** The server properties object. */
private final Properties serverProperties = new Properties();
/** The server properties file. */
private final File serverPropertiesFile;
private static final String __OBFID = "CL_00001782";
public PropertyManager(File p_i45278_1_)
{
this.serverPropertiesFile = p_i45278_1_;
if (p_i45278_1_.exists())
{
FileInputStream fileinputstream = null;
try
{
fileinputstream = new FileInputStream(p_i45278_1_);
this.serverProperties.load(fileinputstream);
}
catch (Exception exception)
{
LOGGER.warn("Failed to load " + p_i45278_1_, exception);
this.generateNewProperties();
}
finally
{
if (fileinputstream != null)
{
try
{
fileinputstream.close();
}
catch (IOException ioexception)
{
;
}
}
}
}
else
{
LOGGER.warn(p_i45278_1_ + " does not exist");
this.generateNewProperties();
}
}
/**
* Generates a new properties file.
*/
public void generateNewProperties()
{
LOGGER.info("Generating new properties file");
this.saveProperties();
}
/**
* Writes the properties to the properties file.
*/
public void saveProperties()
{
FileOutputStream fileoutputstream = null;
try
{
fileoutputstream = new FileOutputStream(this.serverPropertiesFile);
this.serverProperties.store(fileoutputstream, "Minecraft server properties");
}
catch (Exception exception)
{
LOGGER.warn("Failed to save " + this.serverPropertiesFile, exception);
this.generateNewProperties();
}
finally
{
if (fileoutputstream != null)
{
try
{
fileoutputstream.close();
}
catch (IOException ioexception)
{
;
}
}
}
}
/**
* Returns this PropertyManager's file object used for property saving.
*/
public File getPropertiesFile()
{
return this.serverPropertiesFile;
}
/**
* Returns a string property. If the property doesn't exist the default is returned.
*/
public String getStringProperty(String key, String defaultValue)
{
if (!this.serverProperties.containsKey(key))
{
this.serverProperties.setProperty(key, defaultValue);
this.saveProperties();
this.saveProperties();
}
return this.serverProperties.getProperty(key, defaultValue);
}
/**
* Gets an integer property. If it does not exist, set it to the specified value.
*/
public int getIntProperty(String key, int defaultValue)
{
try
{
return Integer.parseInt(this.getStringProperty(key, "" + defaultValue));
}
catch (Exception exception)
{
this.serverProperties.setProperty(key, "" + defaultValue);
this.saveProperties();
return defaultValue;
}
}
/**
* Gets a boolean property. If it does not exist, set it to the specified value.
*/
public boolean getBooleanProperty(String key, boolean defaultValue)
{
try
{
return Boolean.parseBoolean(this.getStringProperty(key, "" + defaultValue));
}
catch (Exception exception)
{
this.serverProperties.setProperty(key, "" + defaultValue);
this.saveProperties();
return defaultValue;
}
}
/**
* Saves an Object with the given property name.
*/
public void setProperty(String key, Object value)
{
this.serverProperties.setProperty(key, "" + value);
}
}