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

99 lines
3.7 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.ritual.portal;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.teleport.PortalLocation;
2018-02-16 23:48:28 -08:00
import WayofTime.bloodmagic.util.BMLog;
import net.minecraftforge.common.DimensionManager;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
2019-03-02 15:48:54 -05:00
public final 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;
2019-03-02 15:48:54 -05:00
private static boolean initialized = false;
private LocationsHandler() {}
2019-03-02 15:48:54 -05:00
public static boolean addLocation(String name, PortalLocation location) {
2017-08-15 21:30:48 -07:00
ArrayList<PortalLocation> portalLocations = portals.get(name);
if (portalLocations == null) {
portals.put(name, new ArrayList<>());
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
}
2019-03-02 15:48:54 -05:00
portals.get(name).add(location);
BMLog.DEBUG.info("Adding {}", name);
updateFile(fileName, portals);
return true;
2017-08-15 21:30:48 -07:00
}
2019-03-02 15:48:54 -05:00
public static boolean removeLocation(String name, PortalLocation location) {
2017-08-15 21:30:48 -07:00
if (portals.get(name) != null && !portals.get(name).isEmpty()) {
2019-03-02 15:48:54 -05:00
if (portals.get(name).remove(location)) {
2018-02-16 23:48:28 -08:00
BMLog.DEBUG.info("Removing {}", name);
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return true;
} else {
2018-02-16 23:48:28 -08:00
BMLog.DEBUG.info("No location matching {}", name);
2017-08-15 21:30:48 -07:00
updateFile(fileName, portals);
return false;
}
}
return false;
}
2019-03-02 15:48:54 -05:00
public static ArrayList<PortalLocation> getLinkedLocations(String name) {
2017-08-15 21:30:48 -07:00
return portals.get(name);
}
2019-03-02 15:48:54 -05:00
public static void verifyIsInitialized() {
if (!initialized) {
HashMap<String, ArrayList<PortalLocation>> map = loadFile();
if(map == null) {
portals = new HashMap<>();
}
initialized = true;
}
}
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()) {
2018-02-16 23:48:28 -08:00
BMLog.DEBUG.info("Creating {} in {}", fileName, DimensionManager.getCurrentSaveRootDirectory());
}
2017-08-15 21:30:48 -07:00
} else if (file.createNewFile()) {
2018-02-16 23:48:28 -08:00
BMLog.DEBUG.info("Creating {} in {}", fileName, 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) {
2018-02-16 23:48:28 -08:00
BMLog.DEFAULT.error("{} was not found in {}", file, 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();
}
}
}