BloodMagic/src/main/java/WayofTime/bloodmagic/ritual/portal/LocationsHandler.java

108 lines
4.2 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.ritual.portal;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.util.PleaseStopUsingMe;
import WayofTime.bloodmagic.teleport.PortalLocation;
import net.minecraftforge.common.DimensionManager;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
2017-08-15 21:30:48 -07:00
public class LocationsHandler implements Serializable {
public static final long serialVersionUID = 10102001;
private static final String fileName = String.valueOf(DimensionManager.getCurrentSaveRootDirectory()) + "/" + BloodMagic.MODID + "/PortalLocations.dat";
private static HashMap<String, ArrayList<PortalLocation>> portals;
private static LocationsHandler locationsHandler;
2017-08-15 21:30:48 -07:00
private LocationsHandler() {
portals = new HashMap<String, ArrayList<PortalLocation>>();
}
2017-08-15 21:30:48 -07:00
public boolean addLocation(String name, PortalLocation location) {
ArrayList<PortalLocation> portalLocations = portals.get(name);
if (portalLocations == null) {
portals.put(name, new ArrayList<PortalLocation>());
updateFile(fileName, portals);
}
if (!portals.get(name).isEmpty() && portals.get(name).size() >= 2) {
PleaseStopUsingMe.logger.info("Location " + name + " already exists.");
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return false;
} else {
portals.get(name).add(location);
PleaseStopUsingMe.logger.info("Adding " + name);
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return true;
}
}
public boolean removeLocation(String name, PortalLocation location) {
if (portals.get(name) != null && !portals.get(name).isEmpty()) {
if (portals.get(name).contains(location)) {
portals.get(name).remove(location);
PleaseStopUsingMe.logger.info("Removing " + name);
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return true;
} else {
PleaseStopUsingMe.logger.info("No location matching " + name);
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return false;
}
}
return false;
}
public ArrayList<PortalLocation> getLinkedLocations(String name) {
return portals.get(name);
}
public static LocationsHandler getLocationsHandler() {
if (locationsHandler == null || loadFile() == null) {
locationsHandler = new LocationsHandler();
return locationsHandler;
2017-08-15 21:30:48 -07:00
} else {
portals = loadFile();
return locationsHandler;
}
}
2017-08-15 21:30:48 -07:00
private static HashMap<String, ArrayList<PortalLocation>> loadFile() {
HashMap<String, ArrayList<PortalLocation>> map;
File file = new File(fileName);
2017-08-15 21:30:48 -07:00
try {
if (!file.exists()) {
if (file.getParentFile().mkdir()) {
if (file.createNewFile()) {
PleaseStopUsingMe.logger.info("Creating " + fileName + " in " + String.valueOf(DimensionManager.getCurrentSaveRootDirectory()));
}
2017-08-15 21:30:48 -07:00
} else if (file.createNewFile()) {
PleaseStopUsingMe.logger.info("Creating " + fileName + " in " + String.valueOf(DimensionManager.getCurrentSaveRootDirectory()));
}
}
FileInputStream fileIn = new FileInputStream(file);
ObjectInputStream in = new ObjectInputStream(fileIn);
map = (HashMap<String, ArrayList<PortalLocation>>) in.readObject();
in.close();
fileIn.close();
return map;
2017-08-15 21:30:48 -07:00
} catch (IOException e) {
return null;
2017-08-15 21:30:48 -07:00
} catch (ClassNotFoundException e) {
PleaseStopUsingMe.logger.error(String.valueOf(file) + " was not found in " + String.valueOf(DimensionManager.getCurrentSaveRootDirectory()));
return null;
}
}
2017-08-15 21:30:48 -07:00
private static void updateFile(String file, HashMap<String, ArrayList<PortalLocation>> object) {
try {
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object);
oos.close();
2017-08-15 21:30:48 -07:00
} catch (IOException e) {
e.printStackTrace();
}
}
}