Work on EquivalencyStack
This commit is contained in:
parent
19569e490f
commit
2285f4e33b
3 changed files with 127 additions and 41 deletions
|
@ -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
|
||||
|
|
|
@ -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,11 +27,28 @@ public class EquivalencyStack implements Comparable<EquivalencyStack>, JsonDeser
|
|||
this(equivalencyList, 1);
|
||||
}
|
||||
|
||||
public EquivalencyStack(List equivalencyList, int stackSize)
|
||||
public EquivalencyStack(List<?> list, int 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
|
||||
public String toString()
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue