Program: 157058
Project: 157058
Buggy source:
/** 
 * Gson invokes this call-back method during deserialization when it encounters a field of the specified type. <p>In the implementation of this call-back method, you should consider invoking  {@link com.google.gson.JsonDeserializationContext#deserialize(com.google.gson.JsonElement,java.lang.reflect.Type)} method to create objectsfor any non-trivial field of the returned object. However, you should never invoke it on the the same type passing  {@code jsonElement} since that will cause an infinite loop (Gson will call yourcall-back method again).
 * @param jsonElement The Json data being deserialized
 * @param typeOfT     The type of the Object to deserialize to
 * @param context
 * @return a deserialized object of the specified type typeOfT which is a subclass of {@code T}
 * @throws com.google.gson.JsonParseException if jsonElement is not in the expected format of {@code typeofT}
 */
@Override public WrappedStack deserialize(JsonElement jsonElement,Type typeOfT,JsonDeserializationContext context) throws JsonParseException {
  if (!jsonElement.isJsonPrimitive()) {
    JsonObject jsonWrappedStack=(JsonObject)jsonElement;
    int stackSize=1;
    String objectType=null;
    Object stackObject=null;
    if (jsonWrappedStack.get("String_Node_Str") != null) {
      objectType=jsonWrappedStack.get("String_Node_Str").getAsString();
    }
    if (jsonWrappedStack.get("String_Node_Str") != null) {
      stackSize=jsonWrappedStack.get("String_Node_Str").getAsInt();
    }
    if (jsonWrappedStack.get("String_Node_Str") != null && !jsonWrappedStack.get("String_Node_Str").isJsonPrimitive()) {
      if (objectType != null) {
        if (objectType.equalsIgnoreCase("String_Node_Str")) {
          JsonItemStack jsonItemStack=JsonItemStack.jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),JsonItemStack.class);
          ItemStack itemStack=null;
          Item item=(Item)Item.itemRegistry.getObject(jsonItemStack.itemName);
          if (stackSize > 0 && item != null) {
            itemStack=new ItemStack(item,stackSize,jsonItemStack.itemDamage);
            if (jsonItemStack.itemNBTTagCompound != null) {
              itemStack.stackTagCompound=jsonItemStack.itemNBTTagCompound;
            }
          }
          stackObject=itemStack;
        }
 else         if (objectType.equalsIgnoreCase("String_Node_Str")) {
          OreStack oreStack=jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),OreStack.class);
          if (stackSize > 0) {
            oreStack.stackSize=stackSize;
          }
          stackObject=oreStack;
        }
 else         if (objectType.equalsIgnoreCase("String_Node_Str")) {
          JsonFluidStack jsonFluidStack=JsonFluidStack.jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),JsonFluidStack.class);
          FluidStack fluidStack=new FluidStack(jsonFluidStack.fluidID,jsonFluidStack.amount,jsonFluidStack.tag);
          if (stackSize > 0) {
            fluidStack.amount=stackSize;
          }
          stackObject=fluidStack;
        }
      }
    }
    if (stackObject != null) {
      return new WrappedStack(stackObject);
    }
 else {
      throw new JsonParseException(String.format("String_Node_Str",jsonElement.toString()));
    }
  }
 else {
    throw new JsonParseException(String.format("String_Node_Str",jsonElement.toString()));
  }
}

Fixed version (ground truth):
/** 
 * Gson invokes this call-back method during deserialization when it encounters a field of the specified type. <p>In the implementation of this call-back method, you should consider invoking  {@link com.google.gson.JsonDeserializationContext#deserialize(com.google.gson.JsonElement,java.lang.reflect.Type)} method to create objectsfor any non-trivial field of the returned object. However, you should never invoke it on the the same type passing  {@code jsonElement} since that will cause an infinite loop (Gson will call yourcall-back method again).
 * @param jsonElement The Json data being deserialized
 * @param typeOfT     The type of the Object to deserialize to
 * @param context
 * @return a deserialized object of the specified type typeOfT which is a subclass of {@code T}
 * @throws com.google.gson.JsonParseException if jsonElement is not in the expected format of {@code typeofT}
 */
@Override public WrappedStack deserialize(JsonElement jsonElement,Type typeOfT,JsonDeserializationContext context) throws JsonParseException {
  if (!jsonElement.isJsonPrimitive()) {
    JsonObject jsonWrappedStack=(JsonObject)jsonElement;
    int stackSize=1;
    String objectType=null;
    Object stackObject=null;
    if (jsonWrappedStack.get("String_Node_Str") != null) {
      objectType=jsonWrappedStack.get("String_Node_Str").getAsString();
    }
    if (jsonWrappedStack.get("String_Node_Str") != null) {
      stackSize=jsonWrappedStack.get("String_Node_Str").getAsInt();
    }
    if (jsonWrappedStack.get("String_Node_Str") != null && !jsonWrappedStack.get("String_Node_Str").isJsonPrimitive()) {
      if (objectType != null) {
        if (objectType.equalsIgnoreCase("String_Node_Str")) {
          JsonItemStack jsonItemStack=JsonItemStack.jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),JsonItemStack.class);
          ItemStack itemStack=null;
          Item item=(Item)Item.itemRegistry.getObject(jsonItemStack.itemName);
          if (stackSize > 0 && item != null) {
            itemStack=new ItemStack(item,stackSize,jsonItemStack.itemDamage);
            if (jsonItemStack.itemNBTTagCompound != null) {
              itemStack.stackTagCompound=jsonItemStack.itemNBTTagCompound;
            }
          }
          stackObject=itemStack;
        }
 else         if (objectType.equalsIgnoreCase("String_Node_Str")) {
          OreStack oreStack=jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),OreStack.class);
          if (stackSize > 0) {
            oreStack.stackSize=stackSize;
          }
          stackObject=oreStack;
        }
 else         if (objectType.equalsIgnoreCase("String_Node_Str")) {
          JsonFluidStack jsonFluidStack=JsonFluidStack.jsonSerializer.fromJson(jsonWrappedStack.get("String_Node_Str"),JsonFluidStack.class);
          FluidStack fluidStack=new FluidStack(jsonFluidStack.fluid,jsonFluidStack.amount,jsonFluidStack.tag);
          if (stackSize > 0) {
            fluidStack.amount=stackSize;
          }
          stackObject=fluidStack;
        }
      }
    }
    if (stackObject != null) {
      return new WrappedStack(stackObject);
    }
 else {
      throw new JsonParseException(String.format("String_Node_Str",jsonElement.toString()));
    }
  }
 else {
    throw new JsonParseException(String.format("String_Node_Str",jsonElement.toString()));
  }
}