/*
* This file is part of the Haven & Hearth game client.
* Copyright (C) 2009 Fredrik Tolf <fredrik@dolda2000.com>, and
* Björn Johannessen <johannessen.bjorn@gmail.com>
*
* Redistribution and/or modification of this file is subject to the
* terms of the GNU Lesser General Public License, version 3, as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* Other parts of this source tree adhere to other copying
* rights. Please see the file `COPYING' in the root directory of the
* source tree for details.
*
* A copy the GNU Lesser General Public License is distributed along
* with the source tree of which this file is a part in the file
* `doc/LPGL-3'. If it is missing for any reason, please see the Free
* Software Foundation's website at <http://www.fsf.org/>, or write
* to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*/
package haven;
import static haven.Utils.getprop;
import haven.geoloc.MapTileData;
import haven.pathfinder.Node;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Pattern;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import ender.CurioInfo;
import ender.GoogleTranslator;
import ender.HLInfo;
import ender.SkillAvailability;
import ender.SkillAvailability.Combat;
public class Config {
public static byte[] authck;
public static String authuser;
public static String authserv;
public static String defserv;
public static URL resurl, mapurl;
public static boolean fullscreen;
public static boolean dbtext;
public static boolean bounddb;
public static boolean profile;
public static boolean nolocalres;
public static String resdir;
public static boolean nopreload;
public static String loadwaited, allused;
public static boolean xray;
public static boolean hide;
public static boolean grid;
public static boolean timestamp;
public static boolean new_chat;
public static boolean highlight = false;
public static boolean use_smileys;
public static boolean zoom;
public static boolean noborders;
public static boolean new_minimap;
public static boolean simple_plants = false;
public static boolean fepbar = false;
public static Set<String> hideObjectList;
public static Set<String> highlightItemList;
public static Map<String, HLInfo> hlcfg = new HashMap<String, HLInfo>();
public static Map<String, Set<String>> hlgroups = new HashMap<String, Set<String>>();
public static Map<String, Set<String>> hlcgroups = new HashMap<String, Set<String>>();
public static HashMap<Pattern, String> smileys;
public static boolean nightvision;
public static Properties options, window_props;
public static int sfxVol;
public static int musicVol;
public static boolean isMusicOn = false;
public static boolean isSoundOn = false;
public static boolean showRadius = false;
public static boolean showHidden = false;
public static boolean showBeast = false;
public static boolean showDirection;
public static boolean showNames;
public static boolean showOtherNames;
public static boolean fastFlowerAnim;
public static boolean sshot_compress;
public static boolean sshot_noui;
public static boolean sshot_nonames;
public static boolean newclaim;
public static boolean showq;
public static boolean showpath;
public static Map<String, Map<String, Float>> FEPMap = new HashMap<String, Map<String, Float>>();
public static Map<String, CurioInfo> curios = new HashMap<String, CurioInfo>();
public static Map<String, ItemType> itemTypes = new HashMap<String, ItemType>();
public static Map<String, Node.Type> obTypes = new HashMap<String, Node.Type>();
public static Map<Short, List<MapTileData>> geoLocs = new HashMap<Short, List<MapTileData>>();
public static Map<String, SkillAvailability> skills;
public static Map<String, String> crafts = new HashMap<String, String>();
public static Map<String, String> beasts = new HashMap<String, String>();
public static List<LoginData> logins = new ArrayList<LoginData>();
// public static
public static boolean highlightSkills;
public static boolean fps = false;
public static boolean TEST = false;
public static boolean simplemap = false;
public static boolean dontScaleMMIcons = true;
public static boolean radar;
public static boolean showViewDistance;
public static boolean autohearth;
public static boolean hearthunknown;
public static boolean hearthred;
public static boolean muteChat = false;
public static boolean showgobpath;
public static boolean showothergobpath = true;
public static boolean edgedTiles = false; // new
public static boolean maxWindow = true; // new
public static boolean broadleafTile = false; // new
public static boolean autoaggro = false;
public static boolean aggrored = false;
public static boolean aggrounknown = false;
public static boolean alarm = false;
public static boolean alarmred = false;
public static boolean alarmunknown = false;
public static boolean tracking = true;
public static boolean crime = false;
public static boolean gobHealth = false;
public static boolean boatHitbox = false;
// script bools
public static boolean runFlaskRunning = false;
public static boolean runFlask = true;
public static boolean forcemod = false;
public static boolean pathDrinker = false;
public static boolean runFlaskSuppression = false;
public static boolean minerSafety = false;
// script bools
public static int maxTextureSize;
static {
try {
String p;
if ((p = getprop("haven.authck", null)) != null)
authck = Utils.hex2byte(p);
authuser = getprop("haven.authuser", null);
authserv = getprop("haven.authserv", null);
defserv = getprop("haven.defserv", null);
if (!(p = getprop("haven.resurl", "http://www.havenandhearth.com/res/")).equals(""))
resurl = new URL(p);
if (!(p = getprop("haven.mapurl", "http://www.havenandhearth.com/mm/")).equals(""))
mapurl = new URL(p);
fullscreen = getprop("haven.fullscreen", "off").equals("on");
loadwaited = getprop("haven.loadwaited", null);
allused = getprop("haven.allused", null);
dbtext = getprop("haven.dbtext", "off").equals("on");
bounddb = getprop("haven.bounddb", "off").equals("on");
profile = getprop("haven.profile", "off").equals("on");
nolocalres = getprop("haven.nolocalres", "").equals("yesimsure");
resdir = getprop("haven.resdir", null);
nopreload = getprop("haven.nopreload", "no").equals("yes");
xray = false;
hide = false;
grid = false;
timestamp = false;
nightvision = true;
zoom = false;
new_minimap = true;
GoogleTranslator.lang = "en";
GoogleTranslator.turnedon = false;
options = new Properties();
window_props = new Properties();
hideObjectList = Collections.synchronizedSet(new HashSet<String>());
highlightItemList = Collections.synchronizedSet(new HashSet<String>());
loadOptions();
loadWindowOptions();
loadSmileys();
loadFEP();
loadCurios();
loadItemTypes();
loadObTypes();
loadSkills();
loadCraft();
loadGeoloc();
loadHighlight();
loadCurrentHighlight();
loadBeasts();
loadLogins();
} catch (java.net.MalformedURLException e) {
throw (new RuntimeException(e));
}
}
public static String mksmiley(String str) {
synchronized (smileys) {
for (Pattern p : Config.smileys.keySet()) {
String res = Config.smileys.get(p);
str = p.matcher(str).replaceAll(res);
}
}
return str;
}
public static void saveCurrentHighlights() {
try {
JSONObject cfg = new JSONObject();
for (String group : hlcgroups.keySet()) {
cfg.put(group, hlcgroups.get(group));
}
try {
FileWriter fw = new FileWriter("highlight.cfg");
cfg.write(fw);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
private static void loadBeasts() {
// bear
String pat = "kritter/bear";
HLInfo inf = new HLInfo(pat, "mmap/bear");
Color col = new Color(0xff797c);
inf.setColor(col);
beasts.put(pat, "Bear");
inf.show = true; // new
hlcfg.put(pat, inf);
// boar
pat = "kritter/boar";
inf = new HLInfo(pat, "mmap/boar");
inf.setColor(col);
beasts.put(pat, "Boar");
inf.show = true; // new
hlcfg.put(pat, inf);
// deer
pat = "kritter/deer";
inf = new HLInfo(pat, "mmap/deer");
inf.setColor(new Color(0x7BAF8E));
beasts.put(pat, "Deer");
inf.show = false; // new
hlcfg.put(pat, inf);
// fox
pat = "kritter/fox";
inf = new HLInfo(pat, "mmap/fox");
inf.setColor(new Color(0xAF8E5B));
beasts.put(pat, "Fox");
inf.show = false;
hlcfg.put(pat, inf);
// rabbit
pat = "kritter/hare";
inf = new HLInfo(pat, "mmap/rabbit");
inf.setColor(new Color(0x8E8E8E));
beasts.put(pat, "Rabbit");
inf.show = false; // new
hlcfg.put(pat, inf);
// battering ram
pat = "kritter/bram";
inf = new HLInfo(pat, "paginae/build/bram");
inf.setColor(Color.PINK);
beasts.put(pat, "Ram");
inf.show = false;
hlcfg.put(pat, inf);
// auroch
pat = "kritter/aurochs";
inf = new HLInfo(pat, "mmap/aurochs");
inf.setColor(new Color(0x8E8E8E));
beasts.put(pat, "Aurochs");
inf.show = false;
hlcfg.put(pat, inf);
// mouflon
pat = "kritter/mufflon";
inf = new HLInfo(pat, "mmap/mufflon");
inf.setColor(new Color(0x8E8E8E));
beasts.put(pat, "Mufflon");
inf.show = false;
hlcfg.put(pat, inf);
}
private static void loadHighlight() {
try {
FileInputStream fstream;
fstream = new FileInputStream("highlight.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String data = "";
String strLine;
while ((strLine = br.readLine()) != null) {
data += strLine;
}
try {
JSONObject cfg = new JSONObject(data);
Iterator<String> keys = cfg.keys();
while (keys.hasNext()) {
String key = keys.next();
Set<String> group = new HashSet<String>();
Set<String> group2 = new HashSet<String>();
hlgroups.put(key, group);
hlcgroups.put(key, group2);
JSONArray arr = cfg.getJSONArray(key);
for (int i = 0; i < arr.length(); i++) {
JSONObject o = arr.getJSONObject(i);
String name = o.getString("name");
String icon = null;
if (!o.isNull("icon")) {
icon = o.getString("icon");
}
HLInfo inf = new HLInfo(name, icon);
if (!o.isNull("color")) {
inf.setColor(new Color(Integer.parseInt(o.getString("color"), 16)));
}
hlcfg.put(name, inf);
group.add(name);
group2.add(name);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
br.close();
fstream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
private static void loadCurrentHighlight() {
try {
FileInputStream fstream;
fstream = new FileInputStream("highlight.cfg");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String data = "";
String strLine;
while ((strLine = br.readLine()) != null) {
data += strLine;
}
try {
JSONObject cfg = new JSONObject(data);
Iterator<String> keys = cfg.keys();
while (keys.hasNext()) {
String key = keys.next();
Set<String> group = new HashSet<String>();
hlcgroups.put(key, group);
JSONArray arr = cfg.getJSONArray(key);
for (int i = 0; i < arr.length(); i++) {
String name = arr.getString(i);
group.add(name);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
br.close();
fstream.close();
} catch (FileNotFoundException e) {
// e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void loadCraft() {
try {
FileInputStream fstream;
fstream = new FileInputStream("craft.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tmp = strLine.split("=");
String name = tmp[0].toLowerCase(), resources = tmp[1].replace("\\n", "\n");
crafts.put(name, resources);
}
br.close();
fstream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
private static void loadSkills() {
skills = new HashMap<String, SkillAvailability>();
// Attacks
skills.put("paginae/atk/knockteeth", new Combat(6));
skills.put("paginae/atk/axe", new Combat(4));
skills.put("paginae/atk/cleave", new Combat(8));
skills.put("paginae/atk/sting", new Combat(2));
skills.put("paginae/atk/strangle", new Combat().maxINT(3));
skills.put("paginae/atk/valstr", new Combat(6));
// Moves
skills.put("paginae/atk/feignflight", new Combat().maxDEF(10));
skills.put("paginae/atk/flex", new Combat(6));
skills.put("paginae/atk/padv", new Combat().minBAL(3));
skills.put("paginae/atk/seize", new Combat().minINT(5).minATK(75));
skills.put("paginae/atk/throwsand", new Combat(1));
// Special Moves
skills.put("paginae/atk/roar", new Combat(14).minINT(10));
skills.put("paginae/atk/bloodshot", new Combat(2));
skills.put("paginae/atk/skuld", new Combat(10));
skills.put("paginae/atk/oppknock", new Combat(5));
skills.put("paginae/atk/sidestep", new Combat(4));
skills.put("paginae/atk/sternorder", new Combat(5));
skills.put("paginae/atk/bee", new Combat(6));
skills.put("paginae/atk/toarms", new Combat(3));
skills.put("paginae/atk/quell", new Combat(2).maxINT(0).minBAL(3));
}
private static void loadCurios() {
try {
FileInputStream fstream;
fstream = new FileInputStream("curio.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
CurioInfo curio = new CurioInfo();
String[] tmp = strLine.split(":");
String name = tmp[0].toLowerCase();
curio.LP = Integer.parseInt(tmp[1]);
curio.time = (int) (60 * Float.parseFloat(tmp[2]));
curio.weight = Integer.parseInt(tmp[3]);
curios.put(name, curio);
}
br.close();
fstream.close();
} catch (Exception e) {
}
}
private static void loadFEP() {
try {
FileInputStream fstream;
fstream = new FileInputStream("fep.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
Map<String, Float> fep = new HashMap<String, Float>();
String[] tmp = strLine.split("=");
String name;
name = tmp[0].toLowerCase();
if (name.charAt(0) == '@') {
name = name.substring(1);
fep.put("isItem", (float) 1.0);
}
tmp = tmp[1].split(" ");
for (String itm : tmp) {
String tmp2[] = itm.split(":");
fep.put(tmp2[0], Float.valueOf(tmp2[1]).floatValue());
}
FEPMap.put(name, fep);
}
br.close();
fstream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
private static void loadItemTypes() {
try {
FileInputStream fstream;
fstream = new FileInputStream("itemtypes.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tmp = strLine.split(":");
String name = tmp[0].toLowerCase();
itemTypes.put(name, ItemType.valueOf(tmp[1]));
}
br.close();
fstream.close();
} catch (Exception e) {
}
}
private static void loadObTypes() {
try {
FileInputStream fstream;
fstream = new FileInputStream("obtypes.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tmp = strLine.split(":");
String name = tmp[0].toLowerCase();
obTypes.put(name, Node.Type.valueOf(tmp[1].trim()));
}
br.close();
fstream.close();
} catch (Exception e) {
}
}
private static void loadLogins() {
try {
FileInputStream fstream = new FileInputStream("passwd");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tmp = strLine.split(":");
logins.add(new LoginData(tmp[0], tmp[1]));
}
br.close();
fstream.close();
} catch (Exception e) {
}
}
public static void saveLogins() {
try {
FileOutputStream fstream = new FileOutputStream("passwd");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fstream, "UTF-8"));
for (LoginData ld : logins)
bw.write(ld.name + ":" + ld.pass + "\n");
bw.close();
fstream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void loadGeoloc() {
DataInputStream is = null;
try {
is = new DataInputStream(new FileInputStream("geoloc.dat"));
while (is.available() > 0) {
short weight = is.readShort();
long hash = is.readLong();
short c1 = is.readShort();
short c2 = is.readShort();
List<MapTileData> geodatas;
if (geoLocs.containsKey(weight)) {
geodatas = geoLocs.get(weight);
} else {
geodatas = new ArrayList<MapTileData>();
geoLocs.put(weight, geodatas);
}
geodatas.add(new MapTileData(weight, hash, c1, c2));
}
is.close();
} catch (Exception e) {
}
}
private static void usage(PrintStream out) {
out.println("usage: haven.jar [-hdPf] [-u USER] [-C HEXCOOKIE] [-r RESDIR] [-U RESURL] [-A AUTHSERV] [SERVER]");
}
public static void cmdline(String[] args) {
PosixArgs opt = PosixArgs.getopt(args, "hdPU:fr:A:u:C:");
if (opt == null) {
usage(System.err);
System.exit(1);
}
for (char c : opt.parsed()) {
switch (c) {
case 'h':
usage(System.out);
System.exit(0);
break;
case 'd':
dbtext = true;
break;
case 'P':
profile = true;
break;
case 'f':
fullscreen = true;
break;
case 'r':
resdir = opt.arg;
break;
case 'A':
authserv = opt.arg;
break;
case 'U':
try {
resurl = new URL(opt.arg);
} catch (java.net.MalformedURLException e) {
System.err.println(e);
System.exit(1);
}
break;
case 'u':
authuser = opt.arg;
break;
case 'C':
authck = Utils.hex2byte(opt.arg);
break;
}
}
if (opt.rest.length > 0)
defserv = opt.rest[0];
}
public static double getSFXVolume() {
return (double) sfxVol / 100;
}
public static int getMusicVolume() {
return isMusicOn ? musicVol : 0;
}
private static void loadSmileys() {
smileys = new HashMap<Pattern, String>();
try {
FileInputStream fstream;
fstream = new FileInputStream("smileys.conf");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
String strLine;
while ((strLine = br.readLine()) != null) {
String[] tmp = strLine.split("\t");
String smile, res;
smile = tmp[0];
res = "\\$img\\[smiley\\/" + tmp[1] + "\\]";
smileys.put(Pattern.compile(smile, Pattern.CASE_INSENSITIVE | Pattern.LITERAL), res);
}
br.close();
fstream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
private static void loadWindowOptions() {
File inputFile = new File("windows.conf");
if (!inputFile.exists()) {
return;
}
try {
window_props.load(new FileInputStream(inputFile));
} catch (IOException e) {
System.out.println(e);
}
}
private static void loadOptions() {
File inputFile = new File("haven.conf");
if (!inputFile.exists()) {
try {
inputFile.createNewFile();
} catch (IOException e) {
return;
}
}
try {
options.load(new FileInputStream("haven.conf"));
} catch (IOException e) {
System.out.println(e);
}
GoogleTranslator.apikey = options.getProperty("GoogleAPIKey", "AIzaSyCuo-ukzI_J5n-inniu2U7729ZfadP16_0");
zoom = options.getProperty("zoom", "false").equals("true");
noborders = options.getProperty("noborders", "false").equals("true");
new_minimap = options.getProperty("new_minimap", "true").equals("true");
new_chat = options.getProperty("new_chat", "true").equals("true");
use_smileys = options.getProperty("use_smileys", "true").equals("true");
isMusicOn = options.getProperty("music_on", "true").equals("true");
isSoundOn = options.getProperty("sound_on", "true").equals("true");
showDirection = options.getProperty("show_direction", "true").equals("true");
showNames = options.getProperty("showNames", "true").equals("true");
showOtherNames = options.getProperty("showOtherNames", "false").equals("true");
showBeast = options.getProperty("showBeast", "false").equals("true");
showRadius = options.getProperty("showRadius", "false").equals("true");
showHidden = options.getProperty("showHidden", "false").equals("true");
simple_plants = options.getProperty("simple_plants", "false").equals("true");
fastFlowerAnim = options.getProperty("fastFlowerAnim", "false").equals("true");
sshot_compress = options.getProperty("sshot_compress", "false").equals("true");
sshot_noui = options.getProperty("sshot_noui", "false").equals("true");
sshot_nonames = options.getProperty("sshot_nonames", "false").equals("true");
newclaim = options.getProperty("newclaim", "true").equals("true");
showq = options.getProperty("showq", "true").equals("true");
showpath = options.getProperty("showpath", "false").equals("true");
showgobpath = options.getProperty("showgobpath", "false").equals("true");
showothergobpath = options.getProperty("showothergobpath", "false").equals("true");
highlightSkills = options.getProperty("highlightSkills", "false").equals("true");
dontScaleMMIcons = options.getProperty("dontScaleMMIcons", "false").equals("true");
radar = options.getProperty("radar", "true").equals("true");
showViewDistance = options.getProperty("showViewDistance", "false").equals("true");
sfxVol = Integer.parseInt(options.getProperty("sfx_vol", "100"));
musicVol = Integer.parseInt(options.getProperty("music_vol", "100"));
autohearth = options.getProperty("autohearth", "false").equals("true");
hearthunknown = options.getProperty("hearthunknown", "false").equals("true");
hearthred = options.getProperty("hearthred", "false").equals("true");
hideObjectList.clear();
String hideObjects = options.getProperty("hideObjects", "");
edgedTiles = options.getProperty("edgedTiles", "false").equals("true"); // new
maxWindow = options.getProperty("maxWindow", "false").equals("true"); // new
broadleafTile = options.getProperty("broadleafTile", "false").equals("true"); // new
fepbar = options.getProperty(FoodMeterWidget.NAME, "false").equals("true");
autoaggro = options.getProperty("autoaggro", "false").equals("true");
aggrored = options.getProperty("aggrored", "false").equals("true");
aggrounknown = options.getProperty("aggrounknown", "false").equals("true");
alarm = options.getProperty("alarm", "true").equals("true");
alarmred = options.getProperty("alarmred", "true").equals("true");
alarmunknown = options.getProperty("alarmunknown", "true").equals("true");
tracking = options.getProperty("tracking", "true").equals("true");
crime = options.getProperty("crime", "false").equals("true");
gobHealth = options.getProperty("gobHealth", "false").equals("true");
boatHitbox = options.getProperty("boatHitbox", "false").equals("true");
if (!hideObjects.isEmpty()) {
for (String objectName : hideObjects.split(",")) {
if (!objectName.isEmpty()) {
hideObjectList.add(objectName);
}
}
}
String highlightObjects = options.getProperty("highlightObjects", "");
if (!highlightObjects.isEmpty()) {
for (String objectName : highlightObjects.split(",")) {
if (!objectName.isEmpty()) {
highlightItemList.add(objectName);
}
}
}
Resource.checkhide();
timestamp = options.getProperty("timestamp", "false").equals("true");
}
public static synchronized void setWindowOpt(String key, String value) {
synchronized (window_props) {
String prev_val = window_props.getProperty(key);
if ((prev_val != null) && prev_val.equals(value))
return;
window_props.setProperty(key, value);
}
saveWindowOpt();
}
public static synchronized void setWindowOpt(String key, Boolean value) {
setWindowOpt(key, value ? "true" : "false");
}
public static void saveWindowOpt() {
synchronized (window_props) {
try {
window_props.store(new FileOutputStream("windows.conf"), "Window config options");
} catch (IOException e) {
System.out.println(e);
}
}
}
public static void addhide(String str) {
hideObjectList.add(str);
Resource.checkhide();
}
public static void remhide(String str) {
hideObjectList.remove(str);
Resource.checkhide();
}
public static void saveOptions() {
String hideObjects = "";
for (String objectName : hideObjectList) {
hideObjects += objectName + ",";
}
String highlightObjects = "";
for (String objectName : highlightItemList) {
highlightObjects += objectName + ",";
}
options.setProperty("hideObjects", hideObjects);
options.setProperty("highlightObjects", highlightObjects);
options.setProperty("GoogleAPIKey", GoogleTranslator.apikey);
options.setProperty("timestamp", (timestamp) ? "true" : "false");
options.setProperty("zoom", zoom ? "true" : "false");
options.setProperty("noborders", noborders ? "true" : "false");
options.setProperty("new_minimap", new_minimap ? "true" : "false");
options.setProperty("new_chat", new_chat ? "true" : "false");
options.setProperty("use_smileys", use_smileys ? "true" : "false");
options.setProperty("sfx_vol", String.valueOf(sfxVol));
options.setProperty("music_vol", String.valueOf(musicVol));
options.setProperty("music_on", isMusicOn ? "true" : "false");
options.setProperty("sound_on", isSoundOn ? "true" : "false");
options.setProperty("show_direction", showDirection ? "true" : "false");
options.setProperty("showNames", showNames ? "true" : "false");
options.setProperty("showOtherNames", showOtherNames ? "true" : "false");
options.setProperty("showBeast", showBeast ? "true" : "false");
options.setProperty("showRadius", showRadius ? "true" : "false");
options.setProperty("showHidden", showHidden ? "true" : "false");
options.setProperty("simple_plants", simple_plants ? "true" : "false");
options.setProperty("fastFlowerAnim", fastFlowerAnim ? "true" : "false");
options.setProperty("sshot_compress", sshot_compress ? "true" : "false");
options.setProperty("sshot_noui", sshot_noui ? "true" : "false");
options.setProperty("sshot_nonames", sshot_nonames ? "true" : "false");
options.setProperty("newclaim", newclaim ? "true" : "false");
options.setProperty("showq", showq ? "true" : "false");
options.setProperty("showpath", showpath ? "true" : "false");
options.setProperty("showgobpath", showgobpath ? "true" : "false");
options.setProperty("showothergobpath", showothergobpath ? "true" : "false");
options.setProperty("highlightSkills", highlightSkills ? "true" : "false");
options.setProperty("dontScaleMMIcons", dontScaleMMIcons ? "true" : "false");
options.setProperty("radar", radar ? "true" : "false");
options.setProperty("autohearth", autohearth ? "true" : "false");
options.setProperty("hearthunknown", hearthunknown ? "true" : "false");
options.setProperty("hearthred", hearthred ? "true" : "false");
options.setProperty("showViewDistance", showViewDistance ? "true" : "false");
options.setProperty("edgedTiles", edgedTiles ? "true" : "false"); // new
options.setProperty("maxWindow", maxWindow ? "true" : "false"); // new
options.setProperty("broadleafTile", broadleafTile ? "true" : "false"); // new
options.setProperty(FoodMeterWidget.NAME, fepbar ? "true" : "false");
options.setProperty("autoaggro", autoaggro ? "true" : "false");
options.setProperty("aggrored", aggrored ? "true" : "false");
options.setProperty("aggrounknown", aggrounknown ? "true" : "false");
options.setProperty("alarm", alarm ? "true" : "false");
options.setProperty("alarmred", alarmred ? "true" : "false");
options.setProperty("alarmunknown", alarmunknown ? "true" : "false");
options.setProperty("tracking", tracking ? "true" : "false");
options.setProperty("crime", crime ? "true" : "false");
options.setProperty("gobHealth", gobHealth ? "true" : "false");
options.setProperty("boatHitbox", boatHitbox ? "true" : "false");
try {
options.store(new FileOutputStream("haven.conf"), "Custom config options");
} catch (IOException e) {
System.out.println(e);
}
}
}