Lots of stuff in various stages of working

This commit is contained in:
pahimar 2015-01-31 23:47:45 -05:00
parent 8c503ffec7
commit f77b24278a
9 changed files with 181 additions and 31 deletions

View file

@ -7,6 +7,7 @@ import com.pahimar.ee3.command.CommandSyncValues;
import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.handler.*; import com.pahimar.ee3.handler.*;
import com.pahimar.ee3.init.*; import com.pahimar.ee3.init.*;
import com.pahimar.ee3.knowledge.KnowledgeRegistry;
import com.pahimar.ee3.knowledge.SkillRegistry; import com.pahimar.ee3.knowledge.SkillRegistry;
import com.pahimar.ee3.network.PacketHandler; import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.proxy.IProxy; import com.pahimar.ee3.proxy.IProxy;
@ -52,10 +53,13 @@ public class EquivalentExchange3
@EventHandler @EventHandler
public void onServerStarting(FMLServerStartingEvent event) public void onServerStarting(FMLServerStartingEvent event)
{ {
SerializationHelper.initModDataDirectories();
KnowledgeRegistry.getInstance();
event.registerServerCommand(new CommandSetValue()); event.registerServerCommand(new CommandSetValue());
event.registerServerCommand(new CommandSetCurrentItemValue()); event.registerServerCommand(new CommandSetCurrentItemValue());
event.registerServerCommand(new CommandSyncValues()); event.registerServerCommand(new CommandSyncValues());
SerializationHelper.initModDataDirectories();
} }
@EventHandler @EventHandler
@ -127,6 +131,8 @@ public class EquivalentExchange3
SerializationHelper.writeNBTToFile(SerializationHelper.getDataDirectory(), SerializationHelper.getModListMD5() + "." + Reference.MOD_ID.toLowerCase(), getEnergyValueRegistry()); SerializationHelper.writeNBTToFile(SerializationHelper.getDataDirectory(), SerializationHelper.getModListMD5() + "." + Reference.MOD_ID.toLowerCase(), getEnergyValueRegistry());
} }
KnowledgeRegistry.getInstance().saveAll();
WorldEventHandler.hasInitilialized = false; WorldEventHandler.hasInitilialized = false;
} }

View file

@ -1,10 +1,26 @@
package com.pahimar.ee3.exchange; package com.pahimar.ee3.exchange;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
public class JsonItemStack public class JsonItemStack
{ {
public String itemName; public String itemName;
public int itemDamage; public int itemDamage;
public NBTTagCompound nbtTagCompound; public NBTTagCompound itemNBTTagCompound;
public JsonItemStack() {
this.itemName = null;
this.itemDamage = 0;
this.itemNBTTagCompound = null;
}
public JsonItemStack(ItemStack itemStack) {
this.itemName = Item.itemRegistry.getNameForObject(itemStack.getItem());
this.itemDamage = itemStack.getItemDamage();
if (itemStack.stackTagCompound != null) {
this.itemNBTTagCompound = itemStack.getTagCompound();
}
}
} }

View file

@ -398,9 +398,9 @@ public class WrappedStack implements Comparable<WrappedStack>, JsonDeserializer<
if (stackSize > 0 && item != null) if (stackSize > 0 && item != null)
{ {
itemStack = new ItemStack(item, stackSize, jsonItemStack.itemDamage); itemStack = new ItemStack(item, stackSize, jsonItemStack.itemDamage);
if (jsonItemStack.nbtTagCompound != null) if (jsonItemStack.itemNBTTagCompound != null)
{ {
itemStack.stackTagCompound = jsonItemStack.nbtTagCompound; itemStack.stackTagCompound = jsonItemStack.itemNBTTagCompound;
} }
} }
stackObject = itemStack; stackObject = itemStack;
@ -475,7 +475,7 @@ public class WrappedStack implements Comparable<WrappedStack>, JsonDeserializer<
jsonItemStack.itemDamage = ((ItemStack) wrappedStack.wrappedStack).getItemDamage(); jsonItemStack.itemDamage = ((ItemStack) wrappedStack.wrappedStack).getItemDamage();
if (((ItemStack) wrappedStack.wrappedStack).stackTagCompound != null) if (((ItemStack) wrappedStack.wrappedStack).stackTagCompound != null)
{ {
jsonItemStack.nbtTagCompound = ((ItemStack) wrappedStack.wrappedStack).stackTagCompound; jsonItemStack.itemNBTTagCompound = ((ItemStack) wrappedStack.wrappedStack).stackTagCompound;
} }
jsonWrappedStack.add("data", gson.toJsonTree(jsonItemStack, JsonItemStack.class)); jsonWrappedStack.add("data", gson.toJsonTree(jsonItemStack, JsonItemStack.class));
} }

View file

@ -14,6 +14,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
// TODO Remove
public class TransmutationKnowledgeHandler public class TransmutationKnowledgeHandler
{ {
public static File playerDataDirectory; public static File playerDataDirectory;

View file

@ -1,5 +1,6 @@
package com.pahimar.ee3.knowledge; package com.pahimar.ee3.knowledge;
import com.pahimar.ee3.reference.Files;
import com.pahimar.ee3.util.SerializationHelper; import com.pahimar.ee3.util.SerializationHelper;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -16,9 +17,11 @@ public class KnowledgeRegistry
private KnowledgeRegistry() private KnowledgeRegistry()
{ {
knowledgeDirectory = new File(SerializationHelper.getPlayerDataDirectory(), "knowledge"); knowledgeDirectory = new File(SerializationHelper.getPlayerDataDirectory(), "knowledge" + File.separator + "transmutation");
knowledgeDirectory.mkdirs(); knowledgeDirectory.mkdirs();
loadTemplateKnowledgeFromDisk();
playerKnowledgeMap = new HashMap<UUID, TransmutationKnowledge>(); playerKnowledgeMap = new HashMap<UUID, TransmutationKnowledge>();
} }
@ -34,14 +37,24 @@ public class KnowledgeRegistry
public TransmutationKnowledge getTemplateKnowledge() public TransmutationKnowledge getTemplateKnowledge()
{ {
if (templateKnowledge == null)
{
}
return templateKnowledge; return templateKnowledge;
} }
public void loadTemplateKnowledgeFromDisk() {
File templateFile = new File(knowledgeDirectory, Files.TEMPLATE_JSON_FILE);
if (!templateFile.exists()) {
templateKnowledge = new TransmutationKnowledge();
SerializationHelper.writeTransmutationKnowledgeToFile(knowledgeDirectory, Files.TEMPLATE_JSON_FILE, templateKnowledge);
} else {
templateKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(knowledgeDirectory, Files.TEMPLATE_JSON_FILE);
}
}
public void saveTemplateKnowledgeToDisk() {
SerializationHelper.writeTransmutationKnowledgeToFile(knowledgeDirectory, Files.TEMPLATE_JSON_FILE, templateKnowledge);
}
public void loadPlayerFromDisk(EntityPlayer entityPlayer) public void loadPlayerFromDisk(EntityPlayer entityPlayer)
{ {
TransmutationKnowledge playerTransmutationKnowledge = new TransmutationKnowledge(); TransmutationKnowledge playerTransmutationKnowledge = new TransmutationKnowledge();
@ -50,8 +63,7 @@ public class KnowledgeRegistry
if (playerKnowledgeFile.exists() && playerKnowledgeFile.isFile()) if (playerKnowledgeFile.exists() && playerKnowledgeFile.isFile())
{ {
// TODO Load from disk as JSON and not as NBT playerTransmutationKnowledge = SerializationHelper.readTransmutationKnowledgeFromFile(knowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json");
playerTransmutationKnowledge = TransmutationKnowledge.readTransmutationKnowledgeFromNBT(SerializationHelper.readNBTFromFile(playerKnowledgeFile));
} }
playerKnowledgeMap.put(entityPlayer.getUniqueID(), playerTransmutationKnowledge); playerKnowledgeMap.put(entityPlayer.getUniqueID(), playerTransmutationKnowledge);
@ -59,7 +71,18 @@ public class KnowledgeRegistry
public void savePlayerKnowledgeToDisk(EntityPlayer entityPlayer) public void savePlayerKnowledgeToDisk(EntityPlayer entityPlayer)
{ {
// TODO Save to disk as JSON and not as NBT if (playerKnowledgeMap.containsKey(entityPlayer.getUniqueID())) {
SerializationHelper.writeNBTToFile(knowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json", playerKnowledgeMap.get(entityPlayer.getUniqueID())); SerializationHelper.writeTransmutationKnowledgeToFile(knowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json", playerKnowledgeMap.get(entityPlayer.getUniqueID()));
} else {
SerializationHelper.writeTransmutationKnowledgeToFile(knowledgeDirectory, entityPlayer.getUniqueID().toString() + ".json", new TransmutationKnowledge());
}
}
public void saveAll() {
saveTemplateKnowledgeToDisk();
for (UUID playerUUID : playerKnowledgeMap.keySet()) {
SerializationHelper.writeTransmutationKnowledgeToFile(knowledgeDirectory, playerUUID.toString() + ".json", playerKnowledgeMap.get(playerUUID));
}
} }
} }

View file

@ -1,18 +1,25 @@
package com.pahimar.ee3.knowledge; package com.pahimar.ee3.knowledge;
import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.handler.TransmutationKnowledgeHandler; import com.pahimar.ee3.handler.TransmutationKnowledgeHandler;
import com.pahimar.ee3.reference.Settings; import com.pahimar.ee3.reference.Settings;
import com.pahimar.ee3.util.ItemHelper; import com.pahimar.ee3.util.ItemHelper;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import java.util.Set;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.TreeSet;
// TODO Change up so that we only track what is not learnable, and what is not recoverable
// Everything that has an EnergyValue is learnable and recoverable unless there is an entry for it in either of these lists
public class SkillRegistry public class SkillRegistry
{ {
private static SkillRegistry SkillRegistry = null; private static SkillRegistry SkillRegistry = null;
private SortedMap<ItemStack, Skill> transmutationSkills; private SortedMap<ItemStack, Skill> transmutationSkills;
private Set<WrappedStack> notLearnableSet;
private Set<WrappedStack> notRecoverableSet;
private SkillRegistry() private SkillRegistry()
{ {
@ -32,6 +39,8 @@ public class SkillRegistry
private void init() private void init()
{ {
transmutationSkills = new TreeMap<ItemStack, Skill>(ItemHelper.comparator); transmutationSkills = new TreeMap<ItemStack, Skill>(ItemHelper.comparator);
notLearnableSet = new TreeSet<WrappedStack>();
notRecoverableSet = new TreeSet<WrappedStack>();
} }
public void addSkill(ItemStack itemStack, boolean learnable, boolean recoverable) public void addSkill(ItemStack itemStack, boolean learnable, boolean recoverable)

View file

@ -1,6 +1,8 @@
package com.pahimar.ee3.knowledge; package com.pahimar.ee3.knowledge;
import com.google.gson.*; import com.google.gson.*;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.pahimar.ee3.exchange.JsonItemStack; import com.pahimar.ee3.exchange.JsonItemStack;
import com.pahimar.ee3.reference.Names; import com.pahimar.ee3.reference.Names;
import com.pahimar.ee3.util.INBTTaggable; import com.pahimar.ee3.util.INBTTaggable;
@ -11,6 +13,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import java.io.*;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.*; import java.util.*;
@ -197,7 +200,7 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer<Tran
{ {
if (json.isJsonArray()) { if (json.isJsonArray()) {
JsonArray jsonArray = (JsonArray) json; JsonArray jsonArray = (JsonArray) json;
Set<ItemStack> itemStackSet = new TreeSet<ItemStack>(ItemHelper.comparator); Set<ItemStack> itemStacks = new TreeSet<ItemStack>(ItemHelper.comparator);
Iterator<JsonElement> iterator = jsonArray.iterator(); Iterator<JsonElement> iterator = jsonArray.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@ -209,16 +212,18 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer<Tran
Item item = (Item) Item.itemRegistry.getObject(jsonItemStack.itemName); Item item = (Item) Item.itemRegistry.getObject(jsonItemStack.itemName);
if (item != null) { if (item != null) {
itemStack = new ItemStack(item, 1, jsonItemStack.itemDamage); itemStack = new ItemStack(item, 1, jsonItemStack.itemDamage);
if (jsonItemStack.nbtTagCompound != null) { if (jsonItemStack.itemNBTTagCompound != null) {
itemStack.stackTagCompound = jsonItemStack.nbtTagCompound; itemStack.stackTagCompound = jsonItemStack.itemNBTTagCompound;
} }
} }
itemStackSet.add(itemStack); if (itemStack != null) {
itemStacks.add(itemStack);
}
} }
} }
return new TransmutationKnowledge(itemStackSet); return new TransmutationKnowledge(itemStacks);
} }
return null; return null;
@ -227,21 +232,70 @@ public class TransmutationKnowledge implements INBTTaggable, JsonSerializer<Tran
@Override @Override
public JsonElement serialize(TransmutationKnowledge transmutationKnowledge, Type typeOfSrc, JsonSerializationContext context) public JsonElement serialize(TransmutationKnowledge transmutationKnowledge, Type typeOfSrc, JsonSerializationContext context)
{ {
Gson gson = new Gson();
JsonArray jsonTransmutationKnowledge = new JsonArray(); JsonArray jsonTransmutationKnowledge = new JsonArray();
for (ItemStack itemStack : transmutationKnowledge.getKnownTransmutations()) for (ItemStack itemStack : transmutationKnowledge.getKnownTransmutations())
{ {
JsonItemStack jsonItemStack = new JsonItemStack(); jsonTransmutationKnowledge.add(jsonSerializer.toJsonTree(new JsonItemStack(itemStack)));
jsonItemStack.itemName = Item.itemRegistry.getNameForObject(itemStack.getItem());
jsonItemStack.itemDamage = itemStack.getItemDamage();
if (itemStack.stackTagCompound != null)
{
jsonItemStack.nbtTagCompound = itemStack.getTagCompound();
}
jsonTransmutationKnowledge.add(gson.toJsonTree(jsonItemStack));
} }
return jsonTransmutationKnowledge; return jsonTransmutationKnowledge;
} }
public static void saveToFile(File file, TransmutationKnowledge transmutationKnowledge) {
JsonWriter jsonWriter;
try {
jsonWriter = new JsonWriter(new FileWriter(file));
jsonWriter.setIndent(" ");
jsonWriter.beginArray();
Iterator<ItemStack> iterator = transmutationKnowledge.getKnownTransmutations().iterator();
while (iterator.hasNext())
{
ItemStack itemStack = iterator.next();
jsonSerializer.toJson(new JsonItemStack(itemStack), JsonItemStack.class, jsonWriter);
}
jsonWriter.endArray();
jsonWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static TransmutationKnowledge readFromFile(File file) {
Set<ItemStack> itemStacks = new TreeSet<ItemStack>(ItemHelper.comparator);
JsonReader jsonReader;
try {
jsonReader = new JsonReader(new FileReader(file));
jsonReader.beginArray();
while (jsonReader.hasNext()) {
JsonItemStack jsonItemStack = jsonSerializer.fromJson(jsonReader, JsonItemStack.class);
ItemStack itemStack = null;
Item item = (Item) Item.itemRegistry.getObject(jsonItemStack.itemName);
if (item != null) {
itemStack = new ItemStack(item, 1, jsonItemStack.itemDamage);
if (jsonItemStack.itemNBTTagCompound != null) {
itemStack.stackTagCompound = jsonItemStack.itemNBTTagCompound;
}
}
if (itemStack != null) {
itemStacks.add(itemStack);
}
}
jsonReader.endArray();
jsonReader.close();
} catch (FileNotFoundException ignored) {
// NOOP
} catch (IOException e) {
e.printStackTrace();
}
return new TransmutationKnowledge(itemStacks);
}
} }

View file

@ -2,7 +2,7 @@ package com.pahimar.ee3.reference;
public class Files public class Files
{ {
public static final String PRE_ASSIGNED_ENERGY_VALUES = "pre-assigned-energy-values.json"; public static final String PRE_ASSIGNED_ENERGY_VALUES = "pre-assigned-energy-values.json";
public static final String POST_ASSIGNED_ENERGY_VALUES = "post-assigned-energy-values.json"; public static final String POST_ASSIGNED_ENERGY_VALUES = "post-assigned-energy-values.json";
public static final String TEMPLATE_JSON_FILE = "template.json";
} }

View file

@ -5,6 +5,7 @@ import com.google.gson.stream.JsonWriter;
import com.pahimar.ee3.api.EnergyValue; import com.pahimar.ee3.api.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueStackMapping; import com.pahimar.ee3.exchange.EnergyValueStackMapping;
import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.knowledge.TransmutationKnowledge;
import com.pahimar.ee3.reference.Reference; import com.pahimar.ee3.reference.Reference;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;
@ -126,10 +127,50 @@ public class SerializationHelper
} }
} catch (Exception exception) } catch (Exception exception)
{ {
LogHelper.warn(String.format("Failed to save %s to file: %s%s", nbtTaggable.getTagLabel(), directory.getAbsolutePath(), fileName));
}
}
}
public static TransmutationKnowledge readTransmutationKnowledgeFromFile(File directory, String fileName) {
if (!directory.exists()) {
directory.mkdirs();
}
return TransmutationKnowledge.readFromFile(new File(directory, fileName));
}
public static void writeTransmutationKnowledgeToFile(File directory, String fileName, TransmutationKnowledge transmutationKnowledge) {
writeTransmutationKnowledgeToFile(directory, fileName, transmutationKnowledge, false);
}
public static void writeTransmutationKnowledgeToFile(File directory, String fileName, TransmutationKnowledge transmutationKnowledge, boolean verboseLogging) {
if (directory != null && fileName != null) {
if (!directory.exists()) {
directory.mkdirs();
}
if (transmutationKnowledge == null) {
transmutationKnowledge = new TransmutationKnowledge();
}
try {
File file1 = new File(directory, fileName + ".tmp");
File file2 = new File(directory, fileName);
TransmutationKnowledge.saveToFile(file1, transmutationKnowledge);
if (file2.exists()) {
file2.delete();
}
file1.renameTo(file2);
if (verboseLogging) if (verboseLogging)
{ {
LogHelper.warn(String.format("Failed to save %s to file: %s%s", nbtTaggable.getTagLabel(), directory.getAbsolutePath(), fileName)); LogHelper.info(String.format("Successfully saved TransmutationKnowledge to file: %s", file2.getAbsolutePath()));
} }
} catch (Exception exception) {
LogHelper.error(String.format("Failed to save TransmutationKnowledge to file: %s%s", directory.getAbsolutePath(), fileName));
} }
} }
} }