TechReborn/src/main/java/techreborn/tiles/idsu/IDSUManager.java

216 lines
5.5 KiB
Java
Raw Normal View History

package techreborn.tiles.idsu;
2015-06-15 21:09:16 +02:00
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
2015-06-15 21:09:16 +02:00
import com.google.gson.reflect.TypeToken;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.world.World;
import net.minecraft.world.storage.ISaveHandler;
import net.minecraftforge.event.world.WorldEvent;
import techreborn.packets.PacketSendIDSUManager;
2015-06-15 21:09:16 +02:00
import java.io.*;
2015-06-15 21:09:16 +02:00
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.TreeMap;
2015-06-15 21:09:16 +02:00
public class IDSUManager {
public static IDSUManager INSTANCE;
2015-06-21 15:17:47 +02:00
public static final String savename = "idsu.json";
public HashMap<World, IDSUWorldSaveData> worldData = new HashMap<World, IDSUWorldSaveData>();
2015-06-15 21:09:16 +02:00
@SubscribeEvent(priority = EventPriority.HIGHEST)
2015-06-21 15:17:47 +02:00
public void worldSave(WorldEvent.Save event) {
if (event.world != null && event.world.getSaveHandler() != null && event.world.getSaveHandler().getWorldDirectory() != null) {
if (worldData.containsKey(event.world)) {
worldData.get(event.world).save();
2015-06-15 21:09:16 +02:00
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
2015-06-21 15:17:47 +02:00
public void worldLoad(WorldEvent.Load event) {
if (event.world != null && event.world.getSaveHandler() != null && event.world.getSaveHandler().getWorldDirectory() != null) {
if (worldData.containsKey(event.world)) {
worldData.get(event.world).load();
} else {
IDSUWorldSaveData worldSaveData = new IDSUWorldSaveData(event.world);
2015-06-21 15:17:47 +02:00
worldData.put(event.world, worldSaveData);
worldSaveData.load();
2015-06-15 21:09:16 +02:00
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
2015-06-21 15:17:47 +02:00
public void worldClosed(WorldEvent.Unload event) {
if (event.world != null && event.world.getSaveHandler() != null && event.world.getSaveHandler().getWorldDirectory() != null) {
if (worldData.containsKey(event.world)) {
worldData.get(event.world).save();
2015-06-15 21:09:16 +02:00
}
}
//this clears the data ready for a new world
2015-06-15 21:09:16 +02:00
worldData.clear();
}
2015-06-21 15:17:47 +02:00
public IDSUValueSaveData getSaveDataForWorld(World world, int channel) {
if (worldData.containsKey(world)) {
return worldData.get(world).getSaves(channel);
} else {
IDSUWorldSaveData worldSaveData = new IDSUWorldSaveData(world);
2015-06-21 15:17:47 +02:00
worldData.put(world, worldSaveData);
worldSaveData.load();
2015-06-21 15:17:47 +02:00
return worldSaveData.getSaves(channel);
}
}
2015-06-15 21:09:16 +02:00
2015-06-21 15:17:47 +02:00
public IDSUWorldSaveData getWorldDataFormWorld(World world) {
if (worldData.containsKey(world)) {
return worldData.get(world);
} else {
IDSUWorldSaveData worldSaveData = new IDSUWorldSaveData(world);
2015-06-21 15:17:47 +02:00
worldData.put(world, worldSaveData);
worldSaveData.load();
2015-06-21 15:17:47 +02:00
return worldSaveData;
}
}
public PacketSendIDSUManager getPacket(World world) {
Gson gson = new Gson();
String json = gson.toJson(getWorldDataFormWorld(world).idsuValues);
2015-06-21 15:17:47 +02:00
if (getWorldDataFormWorld(world).idsuValues.isEmpty()) {
json = "EMPTY";
}
return new PacketSendIDSUManager(json);
}
2015-06-21 15:17:47 +02:00
public void loadFromString(String json, World world) {
if (json.equals("EMPTY")) {
return;
}
IDSUWorldSaveData worldSaveData;
2015-06-21 15:17:47 +02:00
if (worldData.containsKey(world)) {
worldSaveData = worldData.get(world);
} else {
worldSaveData = new IDSUWorldSaveData(world);
2015-06-21 15:17:47 +02:00
worldData.put(world, worldSaveData);
}
Gson gson = new Gson();
2015-06-21 15:17:47 +02:00
Type typeOfHashMap = new TypeToken<TreeMap<Integer, IDSUValueSaveData>>() {
}.getType();
worldSaveData.idsuValues.clear();
worldSaveData.idsuValues = gson.fromJson(json, typeOfHashMap);
}
2015-06-15 21:09:16 +02:00
public class IDSUWorldSaveData {
public TreeMap<Integer, IDSUValueSaveData> idsuValues = new TreeMap<Integer, IDSUValueSaveData>();
2015-06-15 21:09:16 +02:00
public World world;
ISaveHandler saveHandler;
File folder;
File file;
public IDSUWorldSaveData(World world) {
this.world = world;
this.saveHandler = world.getSaveHandler();
2015-06-15 21:12:02 +02:00
folder = new File(saveHandler.getWorldDirectory(), "idsuData");
2015-06-21 15:17:47 +02:00
file = new File(folder, savename);
2015-06-15 21:09:16 +02:00
}
2015-06-21 15:17:47 +02:00
public IDSUValueSaveData getSaves(int i) {
if (idsuValues.containsKey(i)) {
2015-06-15 21:09:16 +02:00
return idsuValues.get(i);
} else {
IDSUValueSaveData data = new IDSUValueSaveData();
idsuValues.put(i, data);
return data;
2015-06-15 21:09:16 +02:00
}
}
2015-06-21 15:17:47 +02:00
public void load() {
if (!file.exists()) {
2015-06-15 21:09:16 +02:00
return;
}
try {
Gson gson = new Gson();
BufferedReader reader = new BufferedReader(new FileReader(file));
2015-06-21 15:17:47 +02:00
Type typeOfHashMap = new TypeToken<TreeMap<Integer, IDSUValueSaveData>>() {
}.getType();
idsuValues.clear();
2015-06-15 21:09:16 +02:00
idsuValues = gson.fromJson(reader, typeOfHashMap);
} catch (Exception e) {
e.printStackTrace();
}
}
2015-06-21 15:17:47 +02:00
public void save() {
if (idsuValues.isEmpty()) {
2015-06-15 21:09:16 +02:00
return;
}
2015-06-21 15:17:47 +02:00
if (!file.exists()) {
if (!folder.exists()) {
2015-06-15 21:09:16 +02:00
folder.mkdirs();
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
2015-06-15 21:09:16 +02:00
String json = gson.toJson(idsuValues);
try {
FileWriter writer = new FileWriter(file);
writer.write(json);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class IDSUValueSaveData {
public double storedPower = 0;
2015-06-15 21:09:16 +02:00
public String name = "";
2015-06-15 21:09:16 +02:00
public IDSUValueSaveData(double storedPower, String name) {
this.storedPower = storedPower;
this.name = name;
}
2015-06-15 21:09:16 +02:00
public IDSUValueSaveData(double storedPower) {
this.storedPower = storedPower;
}
public IDSUValueSaveData() {
}
public double getStoredPower() {
return storedPower;
}
public void setStoredPower(double storedPower) {
this.storedPower = storedPower;
}
public void addEnergy(double storedPower) {
this.storedPower += storedPower;
}
2015-06-15 21:09:16 +02:00
}
}