More serialization work, looking a lot cleaner than before but definitely still some improvements possible

This commit is contained in:
Pahimar 2016-05-12 16:02:01 -04:00
parent 21e1db1468
commit 31b9d45dfe
5 changed files with 81 additions and 103 deletions

View file

@ -1,6 +1,5 @@
package com.pahimar.ee3.exchange;
import com.google.common.reflect.TypeToken;
import com.pahimar.ee3.api.exchange.EnergyValue;
import com.pahimar.ee3.util.LogHelper;
import com.pahimar.ee3.util.SerializationHelper;
@ -13,7 +12,6 @@ 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;
@ -21,7 +19,6 @@ public class NewEnergyValueRegistry {
public static final Marker ENERGY_VALUE_MARKER = MarkerManager.getMarker("EE3_ENERGY_VALUE", LogHelper.MOD_MARKER);
public static final NewEnergyValueRegistry INSTANCE = new NewEnergyValueRegistry();
public static final Type ENERGY_VALUE_MAP_TYPE = new TypeToken<Map<WrappedStack, EnergyValue>>(){}.getType();
public final Map<WrappedStack, EnergyValue> preCalculationMappings;
public final Map<WrappedStack, EnergyValue> postCalculationMappings;

View file

@ -13,39 +13,32 @@ import java.lang.reflect.Type;
public class FluidStackSerializer implements JsonSerializer<FluidStack>, JsonDeserializer<FluidStack> {
// TODO String constants for property names
private static final String NAME = "name";
private static final String TAG_COMPOUND = "tagCompound";
@Override
public FluidStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonObject()) {
JsonObject jsonObject = (JsonObject) json;
JsonObject jsonObject = json.getAsJsonObject();
String fluidName = null;
int fluidAmount = Integer.MIN_VALUE;
NBTTagCompound nbtTagCompound = null;
String name = null;
NBTTagCompound tagCompound = null;
try {
if (jsonObject.get("fluidName").getAsJsonPrimitive().isString()) {
fluidName = jsonObject.get("fluidName").getAsString();
if (jsonObject.get(NAME).getAsJsonPrimitive().isString()) {
name = jsonObject.get(NAME).getAsString();
}
}
catch (IllegalStateException exception) {
}
try {
if (jsonObject.get("fluidAmount").getAsJsonPrimitive().isNumber()) {
fluidAmount = jsonObject.get("fluidAmount").getAsInt();
}
}
catch (IllegalStateException exception) {
}
if (jsonObject.has(TAG_COMPOUND) && jsonObject.get(TAG_COMPOUND).getAsJsonPrimitive().isString()) {
try {
if (jsonObject.get("fluidTagCompound").getAsJsonPrimitive().isString()) {
NBTBase nbtBase = JsonToNBT.func_150315_a(jsonObject.get("fluidTagCompound").getAsString());
NBTBase nbtBase = JsonToNBT.func_150315_a(jsonObject.get(TAG_COMPOUND).getAsString());
if (nbtBase instanceof NBTTagCompound) {
nbtTagCompound = (NBTTagCompound) nbtBase;
tagCompound = (NBTTagCompound) nbtBase;
}
}
}
@ -54,14 +47,14 @@ public class FluidStackSerializer implements JsonSerializer<FluidStack>, JsonDes
catch (NBTException e) {
}
if (fluidName != null) {
Fluid fluid = FluidRegistry.getFluid(fluidName);
if (name != null) {
Fluid fluid = FluidRegistry.getFluid(name);
if (fluid != null && fluidAmount >= 0) {
FluidStack fluidStack = new FluidStack(fluid, fluidAmount);
if (fluid != null) {
FluidStack fluidStack = new FluidStack(fluid, 1);
if (nbtTagCompound != null) {
fluidStack.tag = nbtTagCompound;
if (tagCompound != null) {
fluidStack.tag = tagCompound;
}
return fluidStack;
@ -78,10 +71,9 @@ public class FluidStackSerializer implements JsonSerializer<FluidStack>, JsonDes
if (src != null) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("fluidName", src.getFluid().getName());
jsonObject.addProperty("fluidAmount", src.amount);
jsonObject.addProperty(NAME, src.getFluid().getName());
if (src.tag != null) {
jsonObject.addProperty("fluidTagCompound", src.tag.toString());
jsonObject.addProperty(TAG_COMPOUND, src.tag.toString());
}
return jsonObject;

View file

@ -12,60 +12,61 @@ import java.lang.reflect.Type;
public class ItemStackSerializer implements JsonSerializer<ItemStack>, JsonDeserializer<ItemStack> {
// TODO String constants for property names
private static final String NAME = "name";
private static final String META_VALUE = "metaValue";
private static final String TAG_COMPOUND = "tagCompound";
@Override
public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonObject()) {
JsonObject jsonObject = (JsonObject) json;
JsonObject jsonObject = json.getAsJsonObject();
String itemName = null;
int itemDamage = Integer.MIN_VALUE;
NBTTagCompound nbtTagCompound = null;
String name = null;
int metaValue = 0;
NBTTagCompound tagCompound = null;
try {
if (jsonObject.get("itemName").getAsJsonPrimitive().isString()) {
itemName = jsonObject.get("itemName").getAsString();
if (jsonObject.get(NAME).getAsJsonPrimitive().isString()) {
name = jsonObject.get(NAME).getAsString();
}
}
catch (IllegalStateException exception) {
// TODO We could probably log here that an invalid piece of data was found
}
try {
if (jsonObject.get("itemDamage").getAsJsonPrimitive().isNumber()) {
itemDamage = jsonObject.get("itemDamage").getAsInt();
if (jsonObject.has(META_VALUE) && jsonObject.get(META_VALUE).getAsJsonPrimitive().isNumber()) {
metaValue = jsonObject.get(META_VALUE).getAsInt();
}
}
catch (IllegalStateException exception) {
// TODO We could probably log here that an invalid piece of data was found
}
try {
if (jsonObject.get("itemTagCompound").getAsJsonPrimitive().isString()) {
if (jsonObject.has(TAG_COMPOUND) && jsonObject.get(TAG_COMPOUND).getAsJsonPrimitive().isString()) {
NBTBase nbtBase = JsonToNBT.func_150315_a(jsonObject.get("itemTagCompound").getAsString());
NBTBase nbtBase = JsonToNBT.func_150315_a(jsonObject.get(TAG_COMPOUND).getAsString());
if (nbtBase instanceof NBTTagCompound) {
nbtTagCompound = (NBTTagCompound) nbtBase;
tagCompound = (NBTTagCompound) nbtBase;
}
}
}
catch (IllegalStateException exception) {
}
catch (NBTException e) {
}
catch (IllegalStateException exception) {
// TODO We could probably log here that an invalid piece of data was found
}
if (itemName != null) {
Item item = (Item) Item.itemRegistry.getObject(itemName);
if (name != null) {
Item item = (Item) Item.itemRegistry.getObject(name);
if (item != null) {
ItemStack itemStack = new ItemStack((Item) Item.itemRegistry.getObject(itemName));
ItemStack itemStack = new ItemStack((Item) Item.itemRegistry.getObject(name), 1, metaValue);
if (itemDamage >= 0) {
itemStack.setItemDamage(itemDamage);
}
if (nbtTagCompound != null) {
itemStack.setTagCompound(nbtTagCompound);
if (tagCompound != null) {
itemStack.setTagCompound(tagCompound);
}
return itemStack;
@ -82,10 +83,14 @@ public class ItemStackSerializer implements JsonSerializer<ItemStack>, JsonDeser
if (src != null) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("itemName", Item.itemRegistry.getNameForObject(src.getItem()));
jsonObject.addProperty("itemDamage", src.getItemDamage());
jsonObject.addProperty(NAME, Item.itemRegistry.getNameForObject(src.getItem()));
if (src.getItemDamage() != 0) {
jsonObject.addProperty(META_VALUE, src.getItemDamage());
}
if (src.getTagCompound() != null) {
jsonObject.addProperty("itemTagCompound", src.getTagCompound().toString());
jsonObject.addProperty(TAG_COMPOUND, src.getTagCompound().toString());
}
return jsonObject;

View file

@ -7,7 +7,7 @@ import java.lang.reflect.Type;
public class OreStackSerializer implements JsonSerializer<OreStack>, JsonDeserializer<OreStack> {
// TODO String constants for property names
private static final String NAME = "name";
@Override
public OreStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@ -16,9 +16,9 @@ public class OreStackSerializer implements JsonSerializer<OreStack>, JsonDeseria
JsonObject jsonObject = (JsonObject) json;
try {
if (jsonObject.get("oreName").getAsJsonPrimitive().isString()) {
String oreName = jsonObject.get("oreName").getAsString();
return new OreStack(oreName);
if (jsonObject.get(NAME).getAsJsonPrimitive().isString()) {
String name = jsonObject.get(NAME).getAsString();
return new OreStack(name);
}
}
catch (IllegalStateException exception) {
@ -34,7 +34,7 @@ public class OreStackSerializer implements JsonSerializer<OreStack>, JsonDeseria
if (src != null) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("oreName", src.oreName);
jsonObject.addProperty(NAME, src.oreName);
return jsonObject;
}

View file

@ -11,7 +11,11 @@ import java.lang.reflect.Type;
public class WrappedStackSerializer implements JsonSerializer<WrappedStack>, JsonDeserializer<WrappedStack> {
// TODO String constants for property names
private static final String DATA = "data";
private static final String TYPE = "type";
private static final String TYPE_ITEMSTACK = "itemstack";
private static final String TYPE_ORESTACK = "orestack";
private static final String TYPE_FLUIDSTACK = "fluidstack";
@Override
public WrappedStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@ -21,56 +25,39 @@ public class WrappedStackSerializer implements JsonSerializer<WrappedStack>, Jso
JsonObject jsonObject = json.getAsJsonObject();
String type = null;
int stackSize = Integer.MIN_VALUE;
JsonObject data = null;
try {
if (jsonObject.get("type").getAsJsonPrimitive().isString()) {
type = jsonObject.get("type").getAsString();
if (jsonObject.get(TYPE).getAsJsonPrimitive().isString()) {
type = jsonObject.get(TYPE).getAsString();
}
}
catch (IllegalStateException exception) {
}
try {
if (jsonObject.get("stackSize").getAsJsonPrimitive().isNumber()) {
stackSize = jsonObject.get("stackSize").getAsInt();
}
}
catch (IllegalStateException exception) {
}
// TODO COME BACK HERE AND MAKE THIS CLEANER FOR THE SAKE OF PACK DEVS AND USERS ALIKE
try {
if (jsonObject.get("data").isJsonObject()) {
data = jsonObject.getAsJsonObject("data");
}
}
catch (IllegalStateException exception) {
}
if (jsonObject.get(DATA).isJsonObject()) {
JsonObject data = jsonObject.getAsJsonObject(DATA);
if ("itemstack".equalsIgnoreCase(type) || "orestack".equalsIgnoreCase(type) || "fluidstack".equalsIgnoreCase(type)) {
if (stackSize >= 1) {
if (TYPE_ITEMSTACK.equalsIgnoreCase(type)) {
ItemStack itemStack = SerializationHelper.GSON.fromJson(data, ItemStack.class);
if ("itemstack".equalsIgnoreCase(type)) {
ItemStack itemStack = SerializationHelper.GSON.fromJson(data, ItemStack.class);
if (itemStack != null) {
return WrappedStack.wrap(itemStack, stackSize);
}
if (itemStack != null) {
return WrappedStack.wrap(itemStack);
}
else if ("orestack".equalsIgnoreCase(type)) {
OreStack oreStack = SerializationHelper.GSON.fromJson(data, OreStack.class);
}
else if (TYPE_ORESTACK.equalsIgnoreCase(type)) {
OreStack oreStack = SerializationHelper.GSON.fromJson(data, OreStack.class);
if (oreStack != null) {
return WrappedStack.wrap(oreStack, stackSize);
}
if (oreStack != null) {
return WrappedStack.wrap(oreStack);
}
else if ("fluidstack".equalsIgnoreCase(type)) {
FluidStack fluidStack = SerializationHelper.GSON.fromJson(data, FluidStack.class);
}
else if (TYPE_FLUIDSTACK.equalsIgnoreCase(type)) {
FluidStack fluidStack = SerializationHelper.GSON.fromJson(data, FluidStack.class);
if (fluidStack != null) {
return WrappedStack.wrap(fluidStack, stackSize);
}
if (fluidStack != null) {
return WrappedStack.wrap(fluidStack);
}
}
}
@ -84,11 +71,8 @@ public class WrappedStackSerializer implements JsonSerializer<WrappedStack>, Jso
final JsonObject jsonObject = new JsonObject();
if (src.getWrappedObject() instanceof ItemStack || src.getWrappedObject() instanceof OreStack || src.getWrappedObject() instanceof FluidStack) {
jsonObject.addProperty("type", src.getWrappedObject().getClass().getSimpleName().toLowerCase());
jsonObject.add("data", context.serialize(src.getWrappedObject()));
jsonObject.addProperty("stackSize", src.getStackSize());
if (src != null && src.getWrappedObject() != null) {
jsonObject.add(src.getWrappedObject().getClass().getSimpleName().toLowerCase(), context.serialize(src.getWrappedObject()));
return jsonObject;
}