package net.minecraft.client.resources.data;
import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.lang.reflect.Type;
import java.util.ArrayList;
import net.minecraft.util.JsonUtils;
import org.apache.commons.lang3.Validate;
@SideOnly(Side.CLIENT)
public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSerializer implements JsonSerializer
{
private static final String __OBFID = "CL_00001107";
public AnimationMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_)
{
ArrayList arraylist = Lists.newArrayList();
JsonObject jsonobject = JsonUtils.getElementAsJsonObject(p_deserialize_1_, "metadata section");
int i = JsonUtils.getJsonObjectIntegerFieldValueOrDefault(jsonobject, "frametime", 1);
if (i != 1)
{
Validate.inclusiveBetween(Integer.valueOf(1), Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(i), "Invalid default frame time", new Object[0]);
}
int j;
if (jsonobject.has("frames"))
{
try
{
JsonArray jsonarray = JsonUtils.getJsonObjectJsonArrayField(jsonobject, "frames");
for (j = 0; j < jsonarray.size(); ++j)
{
JsonElement jsonelement1 = jsonarray.get(j);
AnimationFrame animationframe = this.parseAnimationFrame(j, jsonelement1);
if (animationframe != null)
{
arraylist.add(animationframe);
}
}
}
catch (ClassCastException classcastexception)
{
throw new JsonParseException("Invalid animation->frames: expected array, was " + jsonobject.get("frames"), classcastexception);
}
}
int k = JsonUtils.getJsonObjectIntegerFieldValueOrDefault(jsonobject, "width", -1);
j = JsonUtils.getJsonObjectIntegerFieldValueOrDefault(jsonobject, "height", -1);
if (k != -1)
{
Validate.inclusiveBetween(Integer.valueOf(1), Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(k), "Invalid width", new Object[0]);
}
if (j != -1)
{
Validate.inclusiveBetween(Integer.valueOf(1), Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(j), "Invalid height", new Object[0]);
}
return new AnimationMetadataSection(arraylist, k, j, i);
}
private AnimationFrame parseAnimationFrame(int p_110492_1_, JsonElement p_110492_2_)
{
if (p_110492_2_.isJsonPrimitive())
{
return new AnimationFrame(JsonUtils.getJsonElementIntegerValue(p_110492_2_, "frames[" + p_110492_1_ + "]"));
}
else if (p_110492_2_.isJsonObject())
{
JsonObject jsonobject = JsonUtils.getElementAsJsonObject(p_110492_2_, "frames[" + p_110492_1_ + "]");
int j = JsonUtils.getJsonObjectIntegerFieldValueOrDefault(jsonobject, "time", -1);
if (jsonobject.has("time"))
{
Validate.inclusiveBetween(Integer.valueOf(1), Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(j), "Invalid frame time", new Object[0]);
}
int k = JsonUtils.getJsonObjectIntegerFieldValue(jsonobject, "index");
Validate.inclusiveBetween(Integer.valueOf(0), Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(k), "Invalid frame index", new Object[0]);
return new AnimationFrame(k, j);
}
else
{
return null;
}
}
public JsonElement serialize(AnimationMetadataSection p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_)
{
JsonObject jsonobject = new JsonObject();
jsonobject.addProperty("frametime", Integer.valueOf(p_serialize_1_.getFrameTime()));
if (p_serialize_1_.getFrameWidth() != -1)
{
jsonobject.addProperty("width", Integer.valueOf(p_serialize_1_.getFrameWidth()));
}
if (p_serialize_1_.getFrameHeight() != -1)
{
jsonobject.addProperty("height", Integer.valueOf(p_serialize_1_.getFrameHeight()));
}
if (p_serialize_1_.getFrameCount() > 0)
{
JsonArray jsonarray = new JsonArray();
for (int i = 0; i < p_serialize_1_.getFrameCount(); ++i)
{
if (p_serialize_1_.frameHasTime(i))
{
JsonObject jsonobject1 = new JsonObject();
jsonobject1.addProperty("index", Integer.valueOf(p_serialize_1_.getFrameIndex(i)));
jsonobject1.addProperty("time", Integer.valueOf(p_serialize_1_.getFrameTimeSingle(i)));
jsonarray.add(jsonobject1);
}
else
{
jsonarray.add(new JsonPrimitive(Integer.valueOf(p_serialize_1_.getFrameIndex(i))));
}
}
jsonobject.add("frames", jsonarray);
}
return jsonobject;
}
/**
* The name of this section type as it appears in JSON.
*/
public String getSectionName()
{
return "animation";
}
public JsonElement serialize(Object p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_)
{
return this.serialize((AnimationMetadataSection)p_serialize_1_, p_serialize_2_, p_serialize_3_);
}
}