001 /** 002 * This software is provided under the terms of the Minecraft Forge Public 003 * License v1.0. 004 */ 005 006 package net.minecraftforge.common; 007 008 import java.util.ArrayList; 009 010 import net.minecraftforge.common.Property.Type; 011 012 public class Property 013 { 014 public enum Type 015 { 016 STRING, 017 INTEGER, 018 BOOLEAN, 019 DOUBLE; 020 021 private static Type[] values = {STRING, INTEGER, BOOLEAN, DOUBLE}; 022 023 public static Type tryParse(char id) 024 { 025 for (int x = 0; x < values.length; x++) 026 { 027 if (values[x].getID() == id) 028 { 029 return values[x]; 030 } 031 } 032 033 return STRING; 034 } 035 036 public char getID() 037 { 038 return name().charAt(0); 039 } 040 } 041 042 private String name; 043 public String value; 044 public String comment; 045 public String[] valueList; 046 047 private final boolean wasRead; 048 private final boolean isList; 049 private final Type type; 050 051 public Property() 052 { 053 wasRead = false; 054 type = null; 055 isList = false; 056 } 057 058 public Property(String name, String value, Type type) 059 { 060 this(name, value, type, false); 061 } 062 063 Property(String name, String value, Type type, boolean read) 064 { 065 setName(name); 066 this.value = value; 067 this.type = type; 068 wasRead = read; 069 isList = false; 070 } 071 072 public Property(String name, String[] values, Type type) 073 { 074 this(name, values, type, false); 075 } 076 077 Property(String name, String[] values, Type type, boolean read) 078 { 079 setName(name); 080 this.type = type; 081 valueList = values; 082 wasRead = read; 083 isList = true; 084 } 085 086 /** 087 * Returns the value in this property as an integer, 088 * if the value is not a valid integer, it will return -1. 089 * 090 * @return The value 091 */ 092 public int getInt() 093 { 094 return getInt(-1); 095 } 096 097 /** 098 * Returns the value in this property as an integer, 099 * if the value is not a valid integer, it will return the 100 * provided default. 101 * 102 * @param _default The default to provide if the current value is not a valid integer 103 * @return The value 104 */ 105 public int getInt(int _default) 106 { 107 try 108 { 109 return Integer.parseInt(value); 110 } 111 catch (NumberFormatException e) 112 { 113 return _default; 114 } 115 } 116 117 /** 118 * Checks if the current value stored in this property can be converted to an integer. 119 * @return True if the type of the Property is an Integer 120 */ 121 public boolean isIntValue() 122 { 123 try 124 { 125 Integer.parseInt(value); 126 return true; 127 } 128 catch (NumberFormatException e) 129 { 130 return false; 131 } 132 } 133 134 /** 135 * Returns the value in this property as a boolean, 136 * if the value is not a valid boolean, it will return the 137 * provided default. 138 * 139 * @param _default The default to provide 140 * @return The value as a boolean, or the default 141 */ 142 public boolean getBoolean(boolean _default) 143 { 144 if (isBooleanValue()) 145 { 146 return Boolean.parseBoolean(value); 147 } 148 else 149 { 150 return _default; 151 } 152 } 153 154 /** 155 * Checks if the current value held by this property is a valid boolean value. 156 * @return True if it is a boolean value 157 */ 158 public boolean isBooleanValue() 159 { 160 return ("true".equals(value.toLowerCase()) || "false".equals(value.toLowerCase())); 161 } 162 163 /** 164 * Checks if the current value held by this property is a valid double value. 165 * @return True if the value can be converted to an double 166 */ 167 public boolean isDoubleValue() 168 { 169 try 170 { 171 Double.parseDouble(value); 172 return true; 173 } 174 catch (NumberFormatException e) 175 { 176 return false; 177 } 178 } 179 180 /** 181 * Returns the value in this property as a double, 182 * if the value is not a valid double, it will return the 183 * provided default. 184 * 185 * @param _default The default to provide if the current value is not a valid double 186 * @return The value 187 */ 188 public double getDouble(double _default) 189 { 190 try 191 { 192 return Double.parseDouble(value); 193 } 194 catch (NumberFormatException e) 195 { 196 return _default; 197 } 198 } 199 200 /** 201 * Returns the integer value of all values that can 202 * be parsed in the list. 203 * 204 * @return Array of length 0 if none of the values could be parsed. 205 */ 206 public int[] getIntList() 207 { 208 ArrayList<Integer> nums = new ArrayList<Integer>(); 209 210 for (String value : valueList) 211 { 212 try 213 { 214 nums.add(Integer.parseInt(value)); 215 } 216 catch (NumberFormatException e){} 217 } 218 219 int[] primitives = new int[nums.size()]; 220 221 for (int i = 0; i < nums.size(); i++) 222 { 223 primitives[i] = nums.get(i); 224 } 225 226 return primitives; 227 } 228 229 /** 230 * Checks if all of the current values stored in this property can be converted to an integer. 231 * @return True if the type of the Property is an Integer List 232 */ 233 public boolean isIntList() 234 { 235 for (String value : valueList) 236 { 237 try 238 { 239 Integer.parseInt(value); 240 } 241 catch (NumberFormatException e) 242 { 243 return false; 244 } 245 } 246 return true; 247 } 248 249 /** 250 * Returns the boolean value of all values that can 251 * be parsed in the list. 252 * 253 * @return Array of length 0 if none of the values could be parsed. 254 */ 255 public boolean[] getBooleanList() 256 { 257 ArrayList<Boolean> values = new ArrayList<Boolean>(); 258 for (String value : valueList) 259 { 260 try 261 { 262 values.add(Boolean.parseBoolean(value)); 263 } 264 catch (NumberFormatException e){} 265 } 266 267 boolean[] primitives = new boolean[values.size()]; 268 269 for (int i = 0; i < values.size(); i++) 270 { 271 primitives[i] = values.get(i); 272 } 273 274 return primitives; 275 } 276 277 /** 278 * Checks if all of current values stored in this property can be converted to a boolean. 279 * @return True if it is a boolean value 280 */ 281 public boolean isBooleanList() 282 { 283 for (String value : valueList) 284 { 285 if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) 286 { 287 return false; 288 } 289 } 290 291 return true; 292 } 293 294 /** 295 * Returns the double value of all values that can 296 * be parsed in the list. 297 * 298 * @return Array of length 0 if none of the values could be parsed. 299 */ 300 public double[] getDoubleList() 301 { 302 ArrayList<Double> values = new ArrayList<Double>(); 303 for (String value : valueList) 304 { 305 try 306 { 307 values.add(Double.parseDouble(value)); 308 } 309 catch (NumberFormatException e) {} 310 } 311 312 double[] primitives = new double[values.size()]; 313 314 for (int i = 0; i < values.size(); i++) 315 { 316 primitives[i] = values.get(i); 317 } 318 319 return primitives; 320 } 321 322 /** 323 * Checks if all of the current values stored in this property can be converted to a double. 324 * @return True if the type of the Property is a double List 325 */ 326 public boolean isDoubleList() 327 { 328 for (String value : valueList) 329 { 330 try 331 { 332 Double.parseDouble(value); 333 } 334 catch (NumberFormatException e) 335 { 336 return false; 337 } 338 } 339 340 return true; 341 } 342 343 public String getName() 344 { 345 return name; 346 } 347 348 public void setName(String name) 349 { 350 this.name = name; 351 } 352 353 /** 354 * Determines if this config value was just created, or if it was read from the config file. 355 * This is useful for mods who auto-assign there blocks to determine if the ID returned is 356 * a configured one, or a automatically generated one. 357 * 358 * @return True if this property was loaded from the config file with a value 359 */ 360 public boolean wasRead() 361 { 362 return wasRead; 363 } 364 365 public Type getType() 366 { 367 return type; 368 } 369 370 public boolean isList() 371 { 372 return isList; 373 } 374 }