aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
authorConnor-Colenso <52056774+Connor-Colenso@users.noreply.github.com>2022-09-11 01:59:07 +0100
committerGitHub <noreply@github.com>2022-09-11 01:59:07 +0100
commitfe595d51866c8b43fb07b2d8aa3d76ffcbfbc48e (patch)
treed2ad01823fff33408beb772f75ae24a8ad71d6ac /src/main/java/gregtech/common
parent930d4392b82129a413fd23e700a94052ad3e4632 (diff)
downloadGT5-Unofficial-fe595d51866c8b43fb07b2d8aa3d76ffcbfbc48e.tar.gz
GT5-Unofficial-fe595d51866c8b43fb07b2d8aa3d76ffcbfbc48e.tar.bz2
GT5-Unofficial-fe595d51866c8b43fb07b2d8aa3d76ffcbfbc48e.zip
Fix global wireless EU bugging by transferring to world NBT system (#1371)
* Transfer to NBT * Half working, write only. * Fix load data * Works, thanks Kuba. * spotlessApply (#1372) Co-authored-by: Connor-Colenso <52056774+Connor-Colenso@users.noreply.github.com> Co-authored-by: GitHub GTNH Actions <> * Fix NPE in unit tests * Spotless * Move clear map * Spotless and import cleanup * Suppressions and warning corrections * Warnings, warnings, warnings smh. Co-authored-by: GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> Co-authored-by: kuba6000 <kuba.123123.6000@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java5
-rw-r--r--src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java134
-rw-r--r--src/main/java/gregtech/common/misc/GlobalVariableStorage.java21
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);
+
+ // ----------------------------------------------------------------------------------------------
+
+}