Package org.spoutcraft.client.gui.minimap

Source Code of org.spoutcraft.client.gui.minimap.MinimapConfig

/*
* This file is part of Spoutcraft.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org/>
* Spoutcraft is licensed under the GNU Lesser General Public License.
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.spoutcraft.client.gui.minimap;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import net.minecraft.src.Entity;

import org.bukkit.util.config.Configuration;
import org.bukkit.util.config.ConfigurationNode;

import org.spoutcraft.client.SpoutClient;
import org.spoutcraft.client.io.FileUtil;

public class MinimapConfig {
  private static volatile MinimapConfig instance;
  private final Configuration config;

  private boolean enabled = false;
  private boolean coords = true;
  private int zoom = 1;
  private boolean color = true;
  private boolean square = false;
  private boolean lightmap = false;
  private boolean heightmap = true;
  private boolean cavemap = false;
  private boolean firstrun = true;
  private boolean scale = false;
  private float xAdjust = -5;
  private float yAdjust = 5;
  private float sizeAdjust = 1F;
  private boolean directions = true;
  private boolean deathpoints = true;
  private boolean background = true;
  private final Map<String, List<Waypoint>> waypoints = new HashMap<String, List<Waypoint>>();
  private final List<Waypoint> serverWaypoints = new LinkedList<Waypoint>();
  private Waypoint focussedWaypoint = null;
  private int scanRadius = 3;

  private final HashSet<Class<? extends Entity>> blockedEntities = new HashSet<Class<? extends Entity>>();
  private boolean showEntities = true;
  /*
   * minimap: enabled: true ... waypoints: world1: home: x: 128 z: -82
   * enabled: 1 work: ...
   */
  private MinimapConfig(boolean load) {
    File file = new File(FileUtil.getConfigDir(), "minimap.yml");
    if (!file.exists()) {
      try {
        file.createNewFile();
      } catch (IOException e) { }
    }
    config = new Configuration(file);
    if (load) {
      config.load();
      enabled = config.getBoolean("minimap.visible", enabled);
      coords = config.getBoolean("minimap.coords", coords);
      zoom = config.getInt("minimap.zoom", zoom);
      color = config.getBoolean("minimap.color", color);
      square = config.getBoolean("minimap.square", square);
      lightmap = config.getBoolean("minimap.lightmap", lightmap);
      heightmap = config.getBoolean("minimap.heightmap", heightmap);
      cavemap = config.getBoolean("minimap.cavemap", cavemap);
      scale = config.getBoolean("minimap.scale", scale);
      deathpoints = config.getBoolean("minimap.deathpoints", deathpoints);
      background = config.getBoolean("minimap.background", background);
      xAdjust = (float) config.getDouble("minimap.xAdjust", xAdjust);
      yAdjust = (float) config.getDouble("minimap.yAdjust", yAdjust);
      sizeAdjust = (float) config.getDouble("minimap.sizeAdjust", sizeAdjust);
      directions = config.getBoolean("minimap.directions", directions);
      scanRadius = config.getInt("minimap.scanRadius", scanRadius);
      showEntities = config.getBoolean("minimap.showEntities", true);
    }
    firstrun = config.getBoolean("minimap.firstrun", firstrun);
    Map<?, ?> worlds = config.getNodes("waypoints");
    if (worlds != null) {
      Iterator<?> i = worlds.entrySet().iterator();
      while (i.hasNext()) {
        Object o = i.next();
        if (o instanceof Entry) {
          @SuppressWarnings("rawtypes")
          Entry<?, ?> e = (Entry) o;
          if (e.getKey() instanceof String) {
            try {
              String world = (String) e.getKey();
              ConfigurationNode waypoints = (ConfigurationNode) e.getValue();
              for (String name:waypoints.getKeys()) {
                Map<String, Object> locations = waypoints.getNode(name).getAll();
                int x, y = 64, z;
                x = (Integer) locations.get("x");
                if (locations.containsKey("y")) {
                  y = (Integer) locations.get("y");
                }
                z = (Integer) locations.get("z");
                boolean enabled = (Integer) locations.get("enabled") == 1;

                boolean deathpoint = false;
                if (locations.containsKey("deathpoint")) {
                  deathpoint = (Integer) locations.get("deathpoint") == 1;
                }

                Waypoint waypoint = new Waypoint(name, x, y, z, enabled);
                waypoint.deathpoint = deathpoint;
                addWaypoint(world, waypoint);
              }
            } catch (Exception ex) {
              System.err.println("Error while reading waypoints: ");
              ex.printStackTrace();
            }
          } else {
            System.out.println("Entry did not satisfy needs... key: " + e.getKey() + " value: " + e.getValue());
          }
        }
      }
    }
    List<String> blocked = config.getStringList("blockedEntities", new ArrayList<String>());
    if (blocked != null) {
      Iterator<String> i = blocked.iterator();
      while (i.hasNext()) {
        try {
          Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass(i.next());
          blockedEntities.add((Class<? extends Entity>) clazz);
        } catch (ClassNotFoundException e) {
          i.remove();
        } catch (ClassCastException e1) {
        }
      }
    }
    config.setProperty("blockedEntities", blocked);
    config.save();
  }

  public static void initialize() {
    instance = new MinimapConfig(true);
  }

  public static void initialize(boolean load) {
    instance = new MinimapConfig(load);
  }

  public synchronized void save() {
    config.setProperty("minimap.visible", enabled);
    config.setProperty("minimap.coords", coords);
    config.setProperty("minimap.zoom", zoom);
    config.setProperty("minimap.color", color);
    config.setProperty("minimap.square", square);
    config.setProperty("minimap.lightmap", lightmap);
    config.setProperty("minimap.heightmap", heightmap);
    config.setProperty("minimap.cavemap", cavemap);
    config.setProperty("minimap.firstrun", firstrun);
    config.setProperty("minimap.scale", scale);
    config.setProperty("minimap.deathpoints", deathpoints);
    config.setProperty("minimap.background", background);
    config.setProperty("minimap.xAdjust", xAdjust);
    config.setProperty("minimap.yAdjust", yAdjust);
    config.setProperty("minimap.sizeAdjust", sizeAdjust);
    config.setProperty("minimap.directions", directions);
    config.setProperty("minimap.scanRadius", scanRadius);
    config.setProperty("minimap.showEntities", showEntities);
    HashMap<String, Map<String, Map<String, Integer>>> worlds = new HashMap<String, Map<String, Map<String, Integer>>>();
    Iterator<Entry<String, List<Waypoint>>> i = waypoints.entrySet().iterator();
    while (i.hasNext()) {
      Entry<String, List<Waypoint>> e = i.next();
      String world = e.getKey();
      HashMap<String, Map<String, Integer>> waypoints = new HashMap<String, Map<String, Integer>>();
      for (Waypoint waypoint : e.getValue()) {
        if (!waypoint.server) {
          HashMap<String, Integer> values = new HashMap<String, Integer>();
          values.put("x", waypoint.x);
          values.put("y", waypoint.y);
          values.put("z", waypoint.z);
          values.put("enabled", waypoint.enabled ? 1 : 0);
          values.put("deathpoint", waypoint.deathpoint ? 1 : 0);
          waypoints.put(waypoint.name, values);
        }
      }
      worlds.put(world, waypoints);
    }
    config.setProperty("waypoints", worlds);

    List<String> blocked = new ArrayList<String>();
    for (Class<? extends Entity> e:blockedEntities) {
      blocked.add(e.getName());
    }

    config.save();
  }

  public static MinimapConfig getInstance() {
    return instance;
  }

  public boolean isEnabled() {
    return enabled;
  }

  public void setEnabled(boolean enabled) {
    this.enabled = enabled;
  }

  public boolean isCoords() {
    return coords && SpoutClient.getInstance().isCoordsCheat();
  }

  public void setCoords(boolean coords) {
    this.coords = coords;
  }

  public int getZoom() {
    return zoom;
  }

  public void setZoom(int zoom) {
    this.zoom = zoom;
  }

  public boolean isColor() {
    return color;
  }

  public void setColor(boolean color) {
    this.color = color;
  }

  public boolean isSquare() {
    return square;
  }

  public void setSquare(boolean square) {
    this.square = square;
  }

  public boolean isLightmap() {
    return lightmap;
  }

  public void setLightmap(boolean lightmap) {
    this.lightmap = lightmap;
  }

  public boolean isHeightmap() {
    return heightmap;
  }

  public void setHeightmap(boolean heightmap) {
    this.heightmap = heightmap;
  }

  public boolean isCavemap() {
    return cavemap;
  }

  public void setCavemap(boolean cavemap) {
    this.cavemap = cavemap;
  }

  public boolean isFirstrun() {
    return firstrun;
  }

  public void setFirstrun(boolean firstrun) {
    this.firstrun = firstrun;
  }

  public synchronized List<Waypoint> getWaypoints(String world) {
    List<Waypoint> list = waypoints.get(world);
    if (list == null) {
      list = new ArrayList<Waypoint>();
      waypoints.put(world, list);
    }
    return list;
  }

  public synchronized void removeWaypoint(String world, String name) {
    Iterator<Waypoint> i = getWaypoints(world).iterator();
    while (i.hasNext()) {
      if (i.next().name.equalsIgnoreCase(name)) {
        i.remove();
      }
    }
  }

  public synchronized void addWaypoint(String world, String name, int x, int y, int z, boolean enabled) {
    getWaypoints(world).add(new Waypoint(name, x, y, z, enabled));
  }

  public synchronized void addServerWaypoint(double x, double y, double z, String name) {
    serverWaypoints.add(new Waypoint(name, (int)x, (int)y, (int)z, true));
  }

  public synchronized List<Waypoint> getServerWaypoints() {
    return serverWaypoints;
  }

  public synchronized List<Waypoint> getAllWaypoints(String world) {
    LinkedList<Waypoint> list = new LinkedList<Waypoint>();
    list.addAll(getWaypoints(world));
    list.addAll(getServerWaypoints());
    return list;
  }

  public boolean isScale() {
    return scale;
  }

  public void setScale(boolean scale) {
    this.scale = scale;
  }

  public float getAdjustX() {
    return xAdjust;
  }

  public void setAdjustX(float xAdjust) {
    this.xAdjust = xAdjust;
  }

  public float getAdjustY() {
    return yAdjust;
  }

  public void setAdjustY(float yAdjust) {
    this.yAdjust = yAdjust;
  }

  public float getSizeAdjust() {
    return sizeAdjust;
  }

  public void setSizeAdjust(float sizeAdjust) {
    this.sizeAdjust = sizeAdjust;
  }

  public boolean isDirections() {
    return directions;
  }

  public void setDirections(boolean directions) {
    this.directions = directions;
  }

  public Waypoint getFocussedWaypoint() {
    return focussedWaypoint;
  }

  public void setFocussedWaypoint(Waypoint focussedWaypoint) {
    this.focussedWaypoint = focussedWaypoint;
  }

  public void removeWaypoint(Waypoint clickedWaypoint) {
    for (List<Waypoint> list:waypoints.values()) {
      list.remove(clickedWaypoint);
    }
  }

  public void addWaypoint(Waypoint waypoint) {
    addWaypoint(MinimapUtils.getWorldName(), waypoint);
  }

  public void addWaypoint(String worldName, Waypoint waypoint) {
    List<Waypoint> list = waypoints.get(worldName);
    if (list == null) {
      list = new LinkedList<Waypoint>();
      waypoints.put(worldName, list);
    }
    list.add(waypoint);
  }

  public boolean isDeathpoints() {
    return deathpoints;
  }

  public void setDeathpoints(boolean deathpoints) {
    this.deathpoints = deathpoints;
  }

  public boolean isShowBackground() {
    return background;
  }

  public void setShowBackground(boolean background) {
    this.background = background;
  }

  public int getScanRadius() {
    return scanRadius;
  }

  public void setScanRadius(int radius) {
    this.scanRadius = radius;
  }

  public void setEntityVisible(Class<? extends Entity> clazz, boolean visible) {
    if (visible) {
      blockedEntities.remove(clazz);
    } else {
      blockedEntities.add(clazz);
    }
  }

  public boolean isEntityVisible(Class<? extends Entity> clazz) {
    return !blockedEntities.contains(clazz);
  }

  public boolean isShowingEntities() {
    return showEntities;
  }

  public void setShowEntities(boolean showEntities) {
    this.showEntities = showEntities;
  }
}
TOP

Related Classes of org.spoutcraft.client.gui.minimap.MinimapConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.