diff options
Diffstat (limited to 'src/main/java/gregtech/common')
3 files changed, 158 insertions, 2 deletions
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index ef82266ed8..9f5e6a0516 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -76,6 +76,7 @@ import gregtech.common.gui.GT_ContainerVolumetricFlask; import gregtech.common.gui.GT_GUIContainerVolumetricFlask; import gregtech.common.items.GT_MetaGenerated_Item_98; import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.common.misc.GlobalEnergyWorldSavedData; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.text.DateFormat; @@ -1038,6 +1039,8 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG GT_OreDictUnificator.get(OrePrefixes.bucketClay, Materials.Empty, 1L))); } + MinecraftForge.EVENT_BUS.register(new GlobalEnergyWorldSavedData("")); + // IC2 Hazmat addFullHazmatToIC2Item("hazmatHelmet"); addFullHazmatToIC2Item("hazmatChestplate"); @@ -1297,8 +1300,6 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG public void onServerStopping() { File tSaveDirectory = getSaveDirectory(); GregTech_API.sWirelessRedstone.clear(); - saveGlobalEnergyInfo(mUniverse.getWorldInfo().getWorldName()); - clearMaps(); if (tSaveDirectory != null) { try { for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { diff --git a/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java b/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java new file mode 100644 index 0000000000..621fb3beae --- /dev/null +++ b/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java @@ -0,0 +1,134 @@ +package gregtech.common.misc; + +import static gregtech.common.misc.GlobalVariableStorage.*; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import java.io.*; +import java.math.BigInteger; +import java.util.HashMap; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.WorldSavedData; +import net.minecraft.world.storage.MapStorage; +import net.minecraftforge.event.world.WorldEvent; + +public class GlobalEnergyWorldSavedData extends WorldSavedData { + + public static GlobalEnergyWorldSavedData INSTANCE; + + private static final String DATA_NAME = "GregTech_WirelessEUWorldSavedData"; + + private static final String GlobalEnergyNBTTag = "GregTech_GlobalEnergy_MapNBTTag"; + private static final String GlobalEnergyNameNBTTag = "GregTech_GlobalEnergyName_MapNBTTag"; + private static final String GlobalEnergyTeamNBTTag = "GregTech_GlobalEnergyTeam_MapNBTTag"; + + private static void loadInstance(World world) { + + GlobalEnergy.clear(); + GlobalEnergyTeam.clear(); + GlobalEnergyName.clear(); + + MapStorage storage = world.mapStorage; + INSTANCE = (GlobalEnergyWorldSavedData) storage.loadData(GlobalEnergyWorldSavedData.class, DATA_NAME); + if (INSTANCE == null) { + INSTANCE = new GlobalEnergyWorldSavedData(); + storage.setData(DATA_NAME, INSTANCE); + } + INSTANCE.markDirty(); + } + + @SuppressWarnings("unused") + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event) { + if (!event.world.isRemote && event.world.provider.dimensionId == 0) { + loadInstance(event.world); + } + } + + public GlobalEnergyWorldSavedData() { + super(DATA_NAME); + } + + @SuppressWarnings("unused") + public GlobalEnergyWorldSavedData(String name) { + super(name); + } + + @Override + @SuppressWarnings("unchecked") + public void readFromNBT(NBTTagCompound nbtTagCompound) { + + try { + byte[] ba = nbtTagCompound.getByteArray(GlobalEnergyNBTTag); + InputStream byteArrayInputStream = new ByteArrayInputStream(ba); + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + Object data = objectInputStream.readObject(); + GlobalEnergy = (HashMap<String, BigInteger>) data; + } catch (IOException | ClassNotFoundException exception) { + System.out.println(GlobalEnergyNBTTag + " FAILED"); + exception.printStackTrace(); + } + + try { + byte[] ba = nbtTagCompound.getByteArray(GlobalEnergyNameNBTTag); + InputStream byteArrayInputStream = new ByteArrayInputStream(ba); + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + Object data = objectInputStream.readObject(); + GlobalEnergyName = (HashMap<String, String>) data; + } catch (IOException | ClassNotFoundException exception) { + System.out.println(GlobalEnergyNameNBTTag + " FAILED"); + exception.printStackTrace(); + } + + try { + byte[] ba = nbtTagCompound.getByteArray(GlobalEnergyTeamNBTTag); + InputStream byteArrayInputStream = new ByteArrayInputStream(ba); + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + Object data = objectInputStream.readObject(); + GlobalEnergyTeam = (HashMap<String, String>) data; + } catch (IOException | ClassNotFoundException exception) { + System.out.println(GlobalEnergyTeamNBTTag + " FAILED"); + exception.printStackTrace(); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbtTagCompound) { + + try { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(GlobalEnergy); + objectOutputStream.flush(); + byte[] data = byteArrayOutputStream.toByteArray(); + nbtTagCompound.setByteArray(GlobalEnergyNBTTag, data); + } catch (IOException exception) { + System.out.println(GlobalEnergyNBTTag + " SAVE FAILED"); + exception.printStackTrace(); + } + + try { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(GlobalEnergyName); + objectOutputStream.flush(); + byte[] data = byteArrayOutputStream.toByteArray(); + nbtTagCompound.setByteArray(GlobalEnergyNameNBTTag, data); + } catch (Exception exception) { + System.out.println(GlobalEnergyNameNBTTag + " SAVE FAILED"); + exception.printStackTrace(); + } + + try { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); + objectOutputStream.writeObject(GlobalEnergyTeam); + objectOutputStream.flush(); + byte[] data = byteArrayOutputStream.toByteArray(); + nbtTagCompound.setByteArray(GlobalEnergyTeamNBTTag, data); + } catch (IOException exception) { + System.out.println(GlobalEnergyTeamNBTTag + " SAVE FAILED"); + exception.printStackTrace(); + } + } +} diff --git a/src/main/java/gregtech/common/misc/GlobalVariableStorage.java b/src/main/java/gregtech/common/misc/GlobalVariableStorage.java new file mode 100644 index 0000000000..5ec0ed9c82 --- /dev/null +++ b/src/main/java/gregtech/common/misc/GlobalVariableStorage.java @@ -0,0 +1,21 @@ +package gregtech.common.misc; + +import java.math.BigInteger; +import java.util.HashMap; + +public abstract class GlobalVariableStorage { + // --------------------- NEVER access these maps! Use the methods provided! --------------------- + + // Global EU map. + public static HashMap<String, BigInteger> GlobalEnergy = new HashMap<>(100, 0.9f); + + // Maps user IDs to usernames and vice versa. Seems redundant but this makes accessing this + // easier in certain locations (like gt commands). + public static HashMap<String, String> GlobalEnergyName = new HashMap<>(100, 0.9f); + + // Maps UUIDs to other UUIDs. This allows users to join a team. + public static HashMap<String, String> GlobalEnergyTeam = new HashMap<>(100, 0.9f); + + // ---------------------------------------------------------------------------------------------- + +} |