001 package net.minecraft.server.dedicated; 002 003 import java.io.File; 004 import java.io.FileInputStream; 005 import java.io.FileOutputStream; 006 import java.io.IOException; 007 import java.util.Properties; 008 import java.util.logging.Level; 009 import java.util.logging.Logger; 010 011 public class PropertyManager 012 { 013 /** Reference to the logger. */ 014 public static Logger logger = Logger.getLogger("Minecraft"); 015 private Properties properties = new Properties(); 016 private File associatedFile; 017 018 public PropertyManager(File par1File) 019 { 020 this.associatedFile = par1File; 021 022 if (par1File.exists()) 023 { 024 FileInputStream var2 = null; 025 026 try 027 { 028 var2 = new FileInputStream(par1File); 029 this.properties.load(var2); 030 } 031 catch (Exception var12) 032 { 033 logger.log(Level.WARNING, "Failed to load " + par1File, var12); 034 this.logMessageAndSave(); 035 } 036 finally 037 { 038 if (var2 != null) 039 { 040 try 041 { 042 var2.close(); 043 } 044 catch (IOException var11) 045 { 046 ; 047 } 048 } 049 } 050 } 051 else 052 { 053 logger.log(Level.WARNING, par1File + " does not exist"); 054 this.logMessageAndSave(); 055 } 056 } 057 058 /** 059 * logs an info message then calls saveSettingsToFile Yes this appears to be a potential stack overflow - these 2 060 * functions call each other repeatdly if an exception occurs. 061 */ 062 public void logMessageAndSave() 063 { 064 logger.log(Level.INFO, "Generating new properties file"); 065 this.saveProperties(); 066 } 067 068 /** 069 * Writes the properties to the properties file. 070 */ 071 public void saveProperties() 072 { 073 FileOutputStream var1 = null; 074 075 try 076 { 077 var1 = new FileOutputStream(this.associatedFile); 078 this.properties.store(var1, "Minecraft server properties"); 079 } 080 catch (Exception var11) 081 { 082 logger.log(Level.WARNING, "Failed to save " + this.associatedFile, var11); 083 this.logMessageAndSave(); 084 } 085 finally 086 { 087 if (var1 != null) 088 { 089 try 090 { 091 var1.close(); 092 } 093 catch (IOException var10) 094 { 095 ; 096 } 097 } 098 } 099 } 100 101 /** 102 * Returns this PropertyManager's file object used for property saving. 103 */ 104 public File getPropertiesFile() 105 { 106 return this.associatedFile; 107 } 108 109 /** 110 * Gets a property. If it does not exist, set it to the specified value. 111 */ 112 public String getProperty(String par1Str, String par2Str) 113 { 114 if (!this.properties.containsKey(par1Str)) 115 { 116 this.properties.setProperty(par1Str, par2Str); 117 this.saveProperties(); 118 } 119 120 return this.properties.getProperty(par1Str, par2Str); 121 } 122 123 /** 124 * Gets an integer property. If it does not exist, set it to the specified value. 125 */ 126 public int getIntProperty(String par1Str, int par2) 127 { 128 try 129 { 130 return Integer.parseInt(this.getProperty(par1Str, "" + par2)); 131 } 132 catch (Exception var4) 133 { 134 this.properties.setProperty(par1Str, "" + par2); 135 return par2; 136 } 137 } 138 139 /** 140 * Gets a boolean property. If it does not exist, set it to the specified value. 141 */ 142 public boolean getBooleanProperty(String par1Str, boolean par2) 143 { 144 try 145 { 146 return Boolean.parseBoolean(this.getProperty(par1Str, "" + par2)); 147 } 148 catch (Exception var4) 149 { 150 this.properties.setProperty(par1Str, "" + par2); 151 return par2; 152 } 153 } 154 155 /** 156 * Saves an Object with the given property name. 157 */ 158 public void setProperty(String par1Str, Object par2Obj) 159 { 160 this.properties.setProperty(par1Str, "" + par2Obj); 161 } 162 }