diff --git a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java index 35f802d3..409e788a 100644 --- a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java +++ b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java @@ -9,7 +9,9 @@ import com.pahimar.ee3.handler.*; import com.pahimar.ee3.helper.LogHelper; import com.pahimar.ee3.helper.VersionHelper; import com.pahimar.ee3.imc.InterModCommsHandler; +import com.pahimar.ee3.item.EquivalencyStack; import com.pahimar.ee3.item.ModItems; +import com.pahimar.ee3.item.OreStack; import com.pahimar.ee3.item.crafting.RecipesAlchemicalBagDyes; import com.pahimar.ee3.lib.Reference; import com.pahimar.ee3.lib.Strings; @@ -26,11 +28,15 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; +import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraftforge.common.MinecraftForge; import java.io.File; +import java.util.Arrays; /** * Equivalent-Exchange-3 @@ -157,6 +163,12 @@ public class EquivalentExchange3 public void postInit(FMLPostInitializationEvent event) { // NOOP + EquivalencyStack equivalencyStack = new EquivalencyStack(Arrays.asList(new OreStack("ingotGold"), new ItemStack(Item.coal), Block.oreLapis)); + EquivalencyStack equivalencyStack2 = new EquivalencyStack(Arrays.asList(new OreStack("ingotGold"), new ItemStack(Item.coal), Block.oreLapis, equivalencyStack)); + LogHelper.debug(equivalencyStack2); + LogHelper.debug(equivalencyStack2.toJson()); + EquivalencyStack equivalencyStack3 = EquivalencyStack.createFromJson(equivalencyStack2.toJson()); + LogHelper.debug(equivalencyStack3); } @EventHandler diff --git a/src/main/java/com/pahimar/ee3/item/EquivalencyStack.java b/src/main/java/com/pahimar/ee3/item/EquivalencyStack.java index dc4a1f9e..805e7361 100644 --- a/src/main/java/com/pahimar/ee3/item/EquivalencyStack.java +++ b/src/main/java/com/pahimar/ee3/item/EquivalencyStack.java @@ -1,8 +1,10 @@ package com.pahimar.ee3.item; import com.google.gson.*; +import com.pahimar.ee3.helper.LogHelper; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -11,12 +13,13 @@ public class EquivalencyStack implements Comparable, JsonDeser // Gson serializer for serializing to/deserializing from json private static final Gson gsonSerializer = (new GsonBuilder()).registerTypeAdapter(EquivalencyStack.class, new EquivalencyStack()).create(); - public List equivalencyList; + public List equivalencyList; public int stackSize; public EquivalencyStack() { - this(null, -1); + equivalencyList = null; + stackSize = -1; } public EquivalencyStack(List equivalencyList) @@ -24,10 +27,27 @@ public class EquivalencyStack implements Comparable, JsonDeser this(equivalencyList, 1); } - public EquivalencyStack(List equivalencyList, int stackSize) + public EquivalencyStack(List list, int stackSize) { - this.equivalencyList = equivalencyList; - this.stackSize = stackSize; + List equivalencyList = new ArrayList(); + for (Object listObject : list) + { + if (WrappedStack.canBeWrapped(listObject)) + { + equivalencyList.add(new WrappedStack(listObject)); + } + } + + if (equivalencyList.size() == list.size()) + { + this.equivalencyList = equivalencyList; + this.stackSize = stackSize; + } + else + { + this.equivalencyList = null; + this.stackSize = -1; + } } @Override @@ -63,7 +83,7 @@ public class EquivalencyStack implements Comparable, JsonDeser } catch (JsonSyntaxException exception) { - // TODO Log something regarding the failed parse + LogHelper.severe(String.format("Failed to create an EquivalencyStack object for String = '%s'", jsonEquivalencyStack)); } return null; @@ -91,7 +111,6 @@ public class EquivalencyStack implements Comparable, JsonDeser public static Comparator comparator = new Comparator() { - @Override public int compare(EquivalencyStack equivalencyStack1, EquivalencyStack equivalencyStack2) { @@ -114,12 +133,55 @@ public class EquivalencyStack implements Comparable, JsonDeser }; @Override - public EquivalencyStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + public EquivalencyStack deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException + { + if (!jsonElement.isJsonPrimitive()) + { + JsonObject jsonEquivalencyStack = (JsonObject) jsonElement; + + List equivalencyList = new ArrayList(); + int stackSize = -1; + + if (jsonEquivalencyStack.get("equivalencyList") != null) + { + JsonArray jsonEquivalencyList = jsonEquivalencyStack.get("equivalencyList").getAsJsonArray(); + + for (int i = 0; i < jsonEquivalencyList.size(); i++) + { + WrappedStack wrappedStack = new WrappedStack().deserialize(jsonEquivalencyList.get(i).getAsJsonObject(), type, context); + equivalencyList.add(wrappedStack); + } + } + + if (jsonEquivalencyStack.get("stackSize") != null) + { + stackSize = jsonEquivalencyStack.get("stackSize").getAsInt(); + } + + return new EquivalencyStack(equivalencyList, stackSize); + } + return null; } @Override - public JsonElement serialize(EquivalencyStack src, Type typeOfSrc, JsonSerializationContext context) { - return null; + public JsonElement serialize(EquivalencyStack equivalencyStack, Type type, JsonSerializationContext context) + { + JsonObject jsonEquivalencyStack = new JsonObject(); + + Gson gsonWrappedStack = (new GsonBuilder()).registerTypeAdapter(WrappedStack.class, new WrappedStack()).create(); + JsonArray jsonArray = new JsonArray(); + if (equivalencyStack.equivalencyList != null) + { + for (WrappedStack wrappedStack : equivalencyStack.equivalencyList) + { + jsonArray.add(gsonWrappedStack.toJsonTree(wrappedStack)); + } + } + + jsonEquivalencyStack.addProperty("stackSize", equivalencyStack.stackSize); + jsonEquivalencyStack.add("equivalencyList", jsonArray); + + return jsonEquivalencyStack; } } diff --git a/src/main/java/com/pahimar/ee3/item/WrappedStack.java b/src/main/java/com/pahimar/ee3/item/WrappedStack.java index 8791315d..30a28754 100644 --- a/src/main/java/com/pahimar/ee3/item/WrappedStack.java +++ b/src/main/java/com/pahimar/ee3/item/WrappedStack.java @@ -66,7 +66,7 @@ public class WrappedStack ItemStack itemStack = ((ItemStack) object).copy(); - className = object.getClass().getSimpleName(); + className = ItemStack.class.getSimpleName(); stackSize = itemStack.stackSize; itemStack.stackSize = 1; wrappedStack = itemStack; @@ -75,7 +75,7 @@ public class WrappedStack { OreStack oreStack = (OreStack) object; - className = object.getClass().getSimpleName(); + className = OreStack.class.getSimpleName(); stackSize = oreStack.stackSize; oreStack.stackSize = 1; wrappedStack = oreStack; @@ -88,17 +88,16 @@ public class WrappedStack if (possibleOreStack != null) { - className = possibleOreStack.getClass().getSimpleName(); + className = OreStack.class.getSimpleName(); stackSize = possibleOreStack.stackSize; possibleOreStack.stackSize = 1; wrappedStack = possibleOreStack; } else if (canBeWrapped(objectList)) { - // TODO Switch to EquivalencyStack stackSize = 1; - className = ArrayList.class.getSimpleName(); - wrappedStack = objectList; + className = EquivalencyStack.class.getSimpleName(); + wrappedStack = new EquivalencyStack(objectList); } else { @@ -109,10 +108,9 @@ public class WrappedStack } else if (object instanceof EnergyStack) { - EnergyStack energyStack = (EnergyStack) object; - className = object.getClass().getSimpleName(); + className = EnergyStack.class.getSimpleName(); stackSize = energyStack.stackSize; energyStack.stackSize = 1; wrappedStack = energyStack; @@ -121,16 +119,20 @@ public class WrappedStack { FluidStack fluidStack = (FluidStack) object; - className = object.getClass().getSimpleName(); + className = FluidStack.class.getSimpleName(); stackSize = fluidStack.amount; fluidStack.amount = 1; wrappedStack = fluidStack; } - // TODO EquivalencyStack handling -// else if (object instanceof EquivalencyStack) -// { -// -// } + else if (object instanceof EquivalencyStack) + { + EquivalencyStack equivalencyStack = (EquivalencyStack) object; + + className = EquivalencyStack.class.getSimpleName(); + stackSize = equivalencyStack.stackSize; + equivalencyStack.stackSize = 1; + wrappedStack = equivalencyStack; + } else if (object instanceof WrappedStack) { WrappedStack wrappedStackObject = (WrappedStack) object; @@ -152,9 +154,9 @@ public class WrappedStack { WrappedStack wrappedStack = createFromJson((String) object); - if (wrappedStack != null) + if (wrappedStack != null && wrappedStack.getWrappedStack() != null) { - className = object.getClass().getSimpleName(); + className = wrappedStack.getWrappedStack().getClass().getSimpleName(); stackSize = wrappedStack.stackSize; this.wrappedStack = wrappedStack.wrappedStack; } @@ -343,9 +345,10 @@ public class WrappedStack FluidStack fluidStack = (FluidStack) wrappedStack; stringBuilder.append(String.format("%sxfluidStack.%s", stackSize, fluidStack.getFluid().getName())); } - else if (wrappedStack instanceof ArrayList) + else if (wrappedStack instanceof EquivalencyStack) { - stringBuilder.append(String.format("%sxlistStack.%s", stackSize, wrappedStack)); + EquivalencyStack equivalencyStack = (EquivalencyStack) wrappedStack; + stringBuilder.append(String.format("%sxlistStack.%s", stackSize, equivalencyStack.equivalencyList)); } else { @@ -382,7 +385,6 @@ public class WrappedStack } else { - // TODO Switch to EquivalencyStack boolean canBeWrapped = true; List listObject = (List) object; for (Object individualObject : listObject) @@ -404,6 +406,10 @@ public class WrappedStack { return true; } + else if (object instanceof EquivalencyStack) + { + return true; + } return false; } @@ -420,7 +426,7 @@ public class WrappedStack int stackSize = -1; String className = null; - Object wrappedStack = null; + Object stackObject = null; if (jsonWrappedStack.get("className") != null) { @@ -436,15 +442,15 @@ public class WrappedStack { if (className.equalsIgnoreCase(Item.class.getSimpleName())) { - wrappedStack = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Item.class); + stackObject = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Item.class); } else if (className.equalsIgnoreCase(Block.class.getSimpleName())) { - wrappedStack = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Block.class); + stackObject = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Block.class); } else if (className.equalsIgnoreCase(Fluid.class.getSimpleName())) { - wrappedStack = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Fluid.class); + stackObject = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), Fluid.class); } else if (className.equalsIgnoreCase(ItemStack.class.getSimpleName())) { @@ -454,7 +460,7 @@ public class WrappedStack { itemStack.stackSize = stackSize; } - wrappedStack = itemStack; + stackObject = itemStack; } else if (className.equalsIgnoreCase(OreStack.class.getSimpleName())) { @@ -464,7 +470,7 @@ public class WrappedStack { oreStack.stackSize = stackSize; } - wrappedStack = oreStack; + stackObject = oreStack; } else if (className.equalsIgnoreCase(EnergyStack.class.getSimpleName())) { @@ -474,7 +480,7 @@ public class WrappedStack { energyStack.stackSize = stackSize; } - wrappedStack = energyStack; + stackObject = energyStack; } else if (className.equalsIgnoreCase(FluidStack.class.getSimpleName())) { @@ -484,17 +490,23 @@ public class WrappedStack { fluidStack.amount = stackSize; } - wrappedStack = fluidStack; + stackObject = fluidStack; } - else if (className.equalsIgnoreCase(ArrayList.class.getSimpleName())) + else if (className.equalsIgnoreCase(EquivalencyStack.class.getSimpleName())) { - // TODO ArrayList deserialization here + EquivalencyStack equivalencyStack = gsonSerializer.fromJson(jsonWrappedStack.get("wrappedStack"), EquivalencyStack.class); + + if (stackSize > 0) + { + equivalencyStack.stackSize = stackSize; + } + stackObject = equivalencyStack; } } - if (wrappedStack != null) + if (stackObject != null) { - return new WrappedStack(wrappedStack); + return new WrappedStack(stackObject); } else {