Work on EquivalencyStack

This commit is contained in:
pahimar 2013-12-17 21:07:30 -05:00
parent 19569e490f
commit 2285f4e33b
3 changed files with 127 additions and 41 deletions

View file

@ -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

View file

@ -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<EquivalencyStack>, 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<WrappedStack> 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<EquivalencyStack>, JsonDeser
this(equivalencyList, 1);
}
public EquivalencyStack(List equivalencyList, int stackSize)
public EquivalencyStack(List<?> list, int stackSize)
{
this.equivalencyList = equivalencyList;
this.stackSize = stackSize;
List<WrappedStack> equivalencyList = new ArrayList<WrappedStack>();
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<EquivalencyStack>, 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<EquivalencyStack>, JsonDeser
public static Comparator<EquivalencyStack> comparator = new Comparator<EquivalencyStack>()
{
@Override
public int compare(EquivalencyStack equivalencyStack1, EquivalencyStack equivalencyStack2)
{
@ -114,12 +133,55 @@ public class EquivalencyStack implements Comparable<EquivalencyStack>, 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<WrappedStack> equivalencyList = new ArrayList<WrappedStack>();
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;
}
}

View file

@ -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
{