Emagherd work on the 1.7.10 version!
This commit is contained in:
parent
f6102b21da
commit
3a29be6d9a
|
@ -4,6 +4,7 @@ import com.pahimar.ee3.array.AlchemyArrayRegistry;
|
|||
import com.pahimar.ee3.command.CommandEE;
|
||||
import com.pahimar.ee3.exchange.CachedOreDictionary;
|
||||
import com.pahimar.ee3.exchange.EnergyValueRegistry;
|
||||
import com.pahimar.ee3.exchange.NewEnergyValueRegistry;
|
||||
import com.pahimar.ee3.handler.*;
|
||||
import com.pahimar.ee3.init.*;
|
||||
import com.pahimar.ee3.knowledge.AbilityRegistry;
|
||||
|
@ -30,6 +31,7 @@ import cpw.mods.fml.common.network.NetworkRegistry;
|
|||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, certificateFingerprint = Reference.FINGERPRINT, version = Reference.MOD_VERSION, dependencies = Reference.DEPENDENCIES, guiFactory = Reference.GUI_FACTORY_CLASS)
|
||||
public class EquivalentExchange3
|
||||
|
@ -117,6 +119,12 @@ public class EquivalentExchange3
|
|||
{
|
||||
CachedOreDictionary.getInstance();
|
||||
Abilities.initNotLearnables();
|
||||
|
||||
try {
|
||||
NewEnergyValueRegistry.INSTANCE.save();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
|
@ -52,6 +52,7 @@ public class EnergyValueRegistry implements JsonSerializer<EnergyValueRegistry>,
|
|||
energyValueRegistry = new EnergyValueRegistry();
|
||||
}
|
||||
|
||||
|
||||
return energyValueRegistry;
|
||||
}
|
||||
|
||||
|
@ -692,7 +693,7 @@ public class EnergyValueRegistry implements JsonSerializer<EnergyValueRegistry>,
|
|||
energyValuesDataDirectory.mkdirs();
|
||||
|
||||
if (shouldRegenNextRestart) {
|
||||
File staticEnergyValuesJsonFile = new File(energyValuesDataDirectory, Files.STATIC_ENERGY_VALUES_JSON);
|
||||
File staticEnergyValuesJsonFile = new File(energyValuesDataDirectory, Files.ENERGY_VALUES_JSON);
|
||||
File md5EnergyValuesJsonFile = new File(energyValuesDataDirectory, SerializationHelper.getModListMD5() + ".json");
|
||||
|
||||
// JSON
|
||||
|
@ -705,21 +706,31 @@ public class EnergyValueRegistry implements JsonSerializer<EnergyValueRegistry>,
|
|||
|
||||
shouldRegenNextRestart = false;
|
||||
} else {
|
||||
SerializationHelper.compressEnergyValueStackMapToFile(new File(energyValuesDataDirectory, Files.STATIC_ENERGY_VALUES_JSON), energyValueRegistry.stackMappings);
|
||||
SerializationHelper.compressEnergyValueStackMapToFile(new File(energyValuesDataDirectory, Files.ENERGY_VALUES_JSON), energyValueRegistry.stackMappings);
|
||||
SerializationHelper.compressEnergyValueStackMapToFile(new File(energyValuesDataDirectory, SerializationHelper.getModListMD5() + ".json.gz"), energyValueRegistry.stackMappings);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean loadFromFile(File energyValueFile) {
|
||||
if (energyValueFile != null) {
|
||||
LogHelper.info(ENERGY_VALUE_MARKER, "Attempting to load energy values from file: {}", energyValueFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean loadEnergyValueRegistryFromFile() {
|
||||
|
||||
File energyValuesDataDirectory = new File(FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory(), "data" + File.separator + Reference.LOWERCASE_MOD_ID + File.separator + "energyvalues");
|
||||
energyValuesDataDirectory.mkdirs();
|
||||
|
||||
File staticEnergyValuesFile = new File(energyValuesDataDirectory, Files.STATIC_ENERGY_VALUES_JSON);
|
||||
File staticEnergyValuesFile = new File(energyValuesDataDirectory, Files.ENERGY_VALUES_JSON);
|
||||
File md5EnergyValuesFile = new File(energyValuesDataDirectory, SerializationHelper.getModListMD5() + ".json.gz");
|
||||
|
||||
Map<WrappedStack, EnergyValue> stackValueMap = null;
|
||||
|
||||
loadFromFile(new File(Files.Global.dataDirectory, Files.ENERGY_VALUES_JSON));
|
||||
|
||||
if (!Settings.DynamicEnergyValueGeneration.regenerateEnergyValuesWhen.equalsIgnoreCase("Always")) {
|
||||
if (Settings.DynamicEnergyValueGeneration.regenerateEnergyValuesWhen.equalsIgnoreCase("When Mods Change")) {
|
||||
if (md5EnergyValuesFile.exists()) {
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
package com.pahimar.ee3.exchange;
|
||||
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.google.gson.*;
|
||||
import com.pahimar.ee3.api.exchange.EnergyValue;
|
||||
import com.pahimar.ee3.reference.Files;
|
||||
import com.pahimar.ee3.util.LogHelper;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import org.apache.logging.log4j.Marker;
|
||||
import org.apache.logging.log4j.MarkerManager;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class NewEnergyValueRegistry implements JsonSerializer<NewEnergyValueRegistry>, JsonDeserializer<NewEnergyValueRegistry> {
|
||||
|
||||
public static final Marker ENERGY_VALUE_MARKER = MarkerManager.getMarker("EE3_ENERGY_VALUE", LogHelper.MOD_MARKER);
|
||||
public static final NewEnergyValueRegistry INSTANCE = new NewEnergyValueRegistry();
|
||||
private static final Type ENERGY_VALUE_MAP_TYPE = new TypeToken<Map<WrappedStack, EnergyValue>>(){}.getType();
|
||||
|
||||
private final Map<WrappedStack, EnergyValue> preCalculationMappings;
|
||||
private final Map<WrappedStack, EnergyValue> postCalculationMappings;
|
||||
|
||||
private NewEnergyValueRegistry() {
|
||||
preCalculationMappings = new TreeMap<>();
|
||||
// Loading up some dummy values for testing serialization
|
||||
preCalculationMappings.put(WrappedStack.wrap(Items.apple), new EnergyValue(1));
|
||||
preCalculationMappings.put(WrappedStack.wrap(Items.arrow), new EnergyValue(2));
|
||||
preCalculationMappings.put(WrappedStack.wrap(Items.baked_potato), new EnergyValue(3));
|
||||
preCalculationMappings.put(WrappedStack.wrap(Items.bed), new EnergyValue(4));
|
||||
|
||||
postCalculationMappings = new TreeMap<>();
|
||||
}
|
||||
|
||||
public String toJson() {
|
||||
// FIXME This shouldn't be a new object all the time - we should be using an instance of a single serializer
|
||||
return new GsonBuilder().setPrettyPrinting().registerTypeAdapter(NewEnergyValueRegistry.class, new NewEnergyValueRegistry()).create().toJson(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.minecraft.nbt.CompressedStreamTools#safeWrite(NBTTagCompound, File)
|
||||
*/
|
||||
public void save() throws IOException {
|
||||
|
||||
// TODO We should probably keep the references to the energy value data dir and file in this class and not in Files. You know, anti-patterns and stuff.
|
||||
File file = Files.energyValuesDataFile;
|
||||
File tempFile = new File(file.getAbsolutePath() + "_tmp");
|
||||
|
||||
if (tempFile.exists()) {
|
||||
tempFile.delete();
|
||||
}
|
||||
|
||||
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(tempFile));
|
||||
bufferedWriter.write(this.toJson());
|
||||
bufferedWriter.close();
|
||||
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
if (file.exists()) {
|
||||
throw new IOException("Failed to delete " + file);
|
||||
}
|
||||
else {
|
||||
tempFile.renameTo(file);
|
||||
}
|
||||
}
|
||||
|
||||
public void load() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public NewEnergyValueRegistry deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
||||
|
||||
if (json.isJsonObject()) {
|
||||
JsonObject jsonRegistry = new JsonObject();
|
||||
|
||||
if (jsonRegistry.getAsJsonObject("pre_calculation_value_mappings") instanceof JsonObject) { // TODO String constant for property name
|
||||
Map<WrappedStack, EnergyValue> tempMap = context.deserialize(jsonRegistry.getAsJsonObject("pre_calculation_value_mappings"), ENERGY_VALUE_MAP_TYPE);
|
||||
this.preCalculationMappings.clear();
|
||||
this.preCalculationMappings.putAll(tempMap);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(NewEnergyValueRegistry src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
|
||||
JsonObject jsonRegistry = new JsonObject();
|
||||
jsonRegistry.add("pre_calculation_value_mappings", context.serialize(src.preCalculationMappings, ENERGY_VALUE_MAP_TYPE)); // TODO String constant for property name
|
||||
jsonRegistry.add("post_calculation_value_mappings", context.serialize(src.postCalculationMappings, ENERGY_VALUE_MAP_TYPE)); // TODO String constant for property name
|
||||
return jsonRegistry;
|
||||
}
|
||||
}
|
|
@ -11,6 +11,8 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
|||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageSetEnergyValue, IMessage>
|
||||
{
|
||||
public EnergyValueStackMapping energyValueStackMapping;
|
||||
|
@ -37,7 +39,12 @@ public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageS
|
|||
|
||||
if (compressedEnergyValueStackMapping != null)
|
||||
{
|
||||
String decompressedEnergyValueStackMapping = CompressionHelper.decompressStringFromByteArray(compressedEnergyValueStackMapping);
|
||||
String decompressedEnergyValueStackMapping = null;
|
||||
try {
|
||||
decompressedEnergyValueStackMapping = CompressionHelper.decompress(compressedEnergyValueStackMapping);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.energyValueStackMapping = EnergyValueStackMapping.createFromJson(decompressedEnergyValueStackMapping);
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +58,11 @@ public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageS
|
|||
|
||||
if (jsonEnergyValueStackMapping != null)
|
||||
{
|
||||
compressedBytes = CompressionHelper.compressStringToByteArray(jsonEnergyValueStackMapping);
|
||||
try {
|
||||
compressedBytes = CompressionHelper.compress(jsonEnergyValueStackMapping);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (compressedBytes != null)
|
||||
|
|
|
@ -48,7 +48,11 @@ public class MessageSyncEnergyValues implements IMessage, IMessageHandler<Messag
|
|||
|
||||
if (compressedBytes != null)
|
||||
{
|
||||
this.jsonEnergyValueRegistry = CompressionHelper.decompressStringFromByteArray(compressedBytes);
|
||||
try {
|
||||
this.jsonEnergyValueRegistry = CompressionHelper.decompress(compressedBytes);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,7 +68,11 @@ public class MessageSyncEnergyValues implements IMessage, IMessageHandler<Messag
|
|||
|
||||
if (jsonEnergyValueRegistry != null)
|
||||
{
|
||||
compressedBytes = CompressionHelper.compressStringToByteArray(jsonEnergyValueRegistry);
|
||||
try {
|
||||
compressedBytes = CompressionHelper.compress(jsonEnergyValueRegistry);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (compressedBytes != null)
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.netty.buffer.ByteBuf;
|
|||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
|
||||
public class MessageTransmutationKnowledgeUpdate implements IMessage, IMessageHandler<MessageTransmutationKnowledgeUpdate, IMessage>
|
||||
|
@ -82,7 +83,12 @@ public class MessageTransmutationKnowledgeUpdate implements IMessage, IMessageHa
|
|||
|
||||
if (compressedString != null)
|
||||
{
|
||||
String uncompressedString = CompressionHelper.decompressStringFromByteArray(compressedString);
|
||||
String uncompressedString = null;
|
||||
try {
|
||||
uncompressedString = CompressionHelper.decompress(compressedString);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
this.transmutationKnowledge = TransmutationKnowledge.createFromJson(uncompressedString);
|
||||
}
|
||||
}
|
||||
|
@ -98,7 +104,11 @@ public class MessageTransmutationKnowledgeUpdate implements IMessage, IMessageHa
|
|||
|
||||
if (transmutationKnowledge != null)
|
||||
{
|
||||
compressedString = CompressionHelper.compressStringToByteArray(transmutationKnowledge.toJson());
|
||||
try {
|
||||
compressedString = CompressionHelper.compress(transmutationKnowledge.toJson());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (compressedString != null)
|
||||
|
|
|
@ -4,13 +4,38 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
|||
|
||||
import java.io.File;
|
||||
|
||||
public class Files
|
||||
{
|
||||
public class Files {
|
||||
public static final String PRE_CALCULATION_ENERGY_VALUES = "pre-calculation-energy-values.json";
|
||||
public static final String POST_CALCULATION_ENERGY_VALUES = "post-calculation-energy-values.json";
|
||||
public static final String TEMPLATE_JSON_FILE = "template.json";
|
||||
public static final String ABILITIES_JSON_FILE = "abilities.json";
|
||||
public static final String STATIC_ENERGY_VALUES_JSON = "energy-values.json.gz";
|
||||
public static final String ENERGY_VALUES_JSON = "energy-values.json";
|
||||
|
||||
public static File dataDirectory;
|
||||
public static File energyValuesDataDirectory;
|
||||
public static File abilitiesDataDirectory;
|
||||
public static File knowledgeDataDirectory;
|
||||
|
||||
public static File energyValuesDataFile;
|
||||
public static File abilitiesDataFile;
|
||||
public static File knowledgeDataFile;
|
||||
|
||||
public static void init(FMLPreInitializationEvent event) {
|
||||
|
||||
dataDirectory = new File(event.getModConfigurationDirectory().getParentFile(), "data" + File.separator + Reference.LOWERCASE_MOD_ID);
|
||||
|
||||
energyValuesDataDirectory = new File(dataDirectory, "energy-values");
|
||||
energyValuesDataDirectory.mkdirs();
|
||||
energyValuesDataFile = new File(energyValuesDataDirectory, ENERGY_VALUES_JSON);
|
||||
|
||||
abilitiesDataDirectory = new File(dataDirectory, "abilities");
|
||||
abilitiesDataDirectory.mkdirs();
|
||||
abilitiesDataFile = new File(abilitiesDataDirectory, ABILITIES_JSON_FILE);
|
||||
|
||||
knowledgeDataDirectory = new File(dataDirectory, "knowledge");
|
||||
knowledgeDataDirectory.mkdirs();
|
||||
knowledgeDataFile = new File(knowledgeDataDirectory, TEMPLATE_JSON_FILE);
|
||||
}
|
||||
|
||||
public static class Global
|
||||
{
|
||||
|
@ -28,7 +53,7 @@ public class Files
|
|||
dataDirectory = new File(event.getModConfigurationDirectory().getParentFile(), "data" + File.separator + Reference.LOWERCASE_MOD_ID);
|
||||
dataDirectory.mkdirs();
|
||||
|
||||
File energyValueDataDirectory = new File(dataDirectory, "energyvalues");
|
||||
File energyValueDataDirectory = new File(dataDirectory, "energy-values");
|
||||
energyValueDataDirectory.mkdirs();
|
||||
preCalcluationEnergyValueFile = new File(energyValueDataDirectory, PRE_CALCULATION_ENERGY_VALUES);
|
||||
postCalcluationEnergyValueFile = new File(energyValueDataDirectory, POST_CALCULATION_ENERGY_VALUES);
|
||||
|
|
|
@ -1,47 +1,33 @@
|
|||
package com.pahimar.ee3.util;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
public class CompressionHelper
|
||||
{
|
||||
public static byte[] compressStringToByteArray(String uncompressedString)
|
||||
{
|
||||
public static byte[] compress(String uncompressedString) throws IOException {
|
||||
|
||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
GZIPOutputStream gzipOutputStream;
|
||||
try
|
||||
{
|
||||
gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
|
||||
gzipOutputStream.write(uncompressedString.getBytes("UTF-8"));
|
||||
gzipOutputStream.close();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
|
||||
gzipOutputStream.write(uncompressedString.getBytes(StandardCharsets.UTF_8));
|
||||
gzipOutputStream.close();
|
||||
|
||||
return byteArrayOutputStream.toByteArray();
|
||||
}
|
||||
|
||||
public static String decompressStringFromByteArray(byte[] compressedString)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
try
|
||||
{
|
||||
GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedString));
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gzipInputStream, "UTF-8"));
|
||||
public static String decompress(byte[] compressedString) throws IOException {
|
||||
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null)
|
||||
{
|
||||
stringBuilder.append(line);
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedString));
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gzipInputStream, StandardCharsets.UTF_8));
|
||||
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
stringBuilder.append(line);
|
||||
}
|
||||
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -270,7 +270,7 @@ public class SerializationHelper
|
|||
{
|
||||
try
|
||||
{
|
||||
byte[] energyValueRegistryArray = CompressionHelper.compressStringToByteArray(EnergyValueRegistry.getInstance().toJson());
|
||||
byte[] energyValueRegistryArray = CompressionHelper.compress(EnergyValueRegistry.getInstance().toJson());
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
fos.write(energyValueRegistryArray);
|
||||
fos.close();
|
||||
|
@ -301,7 +301,7 @@ public class SerializationHelper
|
|||
|
||||
try
|
||||
{
|
||||
String jsonEnergyValueStackMap = CompressionHelper.decompressStringFromByteArray(Files.toByteArray(file));
|
||||
String jsonEnergyValueStackMap = CompressionHelper.decompress(Files.toByteArray(file));
|
||||
JsonReader jsonReader = new JsonReader(new StringReader(jsonEnergyValueStackMap));
|
||||
jsonReader.beginArray();
|
||||
while (jsonReader.hasNext())
|
||||
|
|
Loading…
Reference in New Issue