package net.minecraft.client.renderer.block.model;
import com.google.common.collect.Maps;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import java.lang.reflect.Type;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javax.vecmath.Vector3f;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.JsonUtils;
import net.minecraft.util.MathHelper;
public class BlockPart
{
public final Vector3f field_178241_a;
public final Vector3f field_178239_b;
public final Map field_178240_c;
public final BlockPartRotation field_178237_d;
public final boolean field_178238_e;
private static final String __OBFID = "CL_00002511";
public BlockPart(Vector3f p_i46231_1_, Vector3f p_i46231_2_, Map p_i46231_3_, BlockPartRotation p_i46231_4_, boolean p_i46231_5_)
{
this.field_178241_a = p_i46231_1_;
this.field_178239_b = p_i46231_2_;
this.field_178240_c = p_i46231_3_;
this.field_178237_d = p_i46231_4_;
this.field_178238_e = p_i46231_5_;
this.func_178235_a();
}
private void func_178235_a()
{
Iterator var1 = this.field_178240_c.entrySet().iterator();
while (var1.hasNext())
{
Entry var2 = (Entry)var1.next();
float[] var3 = this.func_178236_a((EnumFacing)var2.getKey());
((BlockPartFace)var2.getValue()).field_178243_e.func_178349_a(var3);
}
}
private float[] func_178236_a(EnumFacing p_178236_1_)
{
float[] var2;
switch (BlockPart.SwitchEnumFacing.field_178234_a[p_178236_1_.ordinal()])
{
case 1:
case 2:
var2 = new float[] {this.field_178241_a.x, this.field_178241_a.z, this.field_178239_b.x, this.field_178239_b.z};
break;
case 3:
case 4:
var2 = new float[] {this.field_178241_a.x, 16.0F - this.field_178239_b.y, this.field_178239_b.x, 16.0F - this.field_178241_a.y};
break;
case 5:
case 6:
var2 = new float[] {this.field_178241_a.z, 16.0F - this.field_178239_b.y, this.field_178239_b.z, 16.0F - this.field_178241_a.y};
break;
default:
throw new NullPointerException();
}
return var2;
}
static class Deserializer implements JsonDeserializer
{
private static final String __OBFID = "CL_00002509";
public BlockPart func_178254_a(JsonElement p_178254_1_, Type p_178254_2_, JsonDeserializationContext p_178254_3_)
{
JsonObject var4 = p_178254_1_.getAsJsonObject();
Vector3f var5 = this.func_178249_e(var4);
Vector3f var6 = this.func_178247_d(var4);
BlockPartRotation var7 = this.func_178256_a(var4);
Map var8 = this.func_178250_a(p_178254_3_, var4);
if (var4.has("shade") && !JsonUtils.func_180199_c(var4, "shade"))
{
throw new JsonParseException("Expected shade to be a Boolean");
}
else
{
boolean var9 = JsonUtils.getJsonObjectBooleanFieldValueOrDefault(var4, "shade", true);
return new BlockPart(var5, var6, var8, var7, var9);
}
}
private BlockPartRotation func_178256_a(JsonObject p_178256_1_)
{
BlockPartRotation var2 = null;
if (p_178256_1_.has("rotation"))
{
JsonObject var3 = JsonUtils.getJsonObject(p_178256_1_, "rotation");
Vector3f var4 = this.func_178251_a(var3, "origin");
var4.scale(0.0625F);
EnumFacing.Axis var5 = this.func_178252_c(var3);
float var6 = this.func_178255_b(var3);
boolean var7 = JsonUtils.getJsonObjectBooleanFieldValueOrDefault(var3, "rescale", false);
var2 = new BlockPartRotation(var4, var5, var6, var7);
}
return var2;
}
private float func_178255_b(JsonObject p_178255_1_)
{
float var2 = JsonUtils.getJsonObjectFloatFieldValue(p_178255_1_, "angle");
if (var2 != 0.0F && MathHelper.abs(var2) != 22.5F && MathHelper.abs(var2) != 45.0F)
{
throw new JsonParseException("Invalid rotation " + var2 + " found, only -45/-22.5/0/22.5/45 allowed");
}
else
{
return var2;
}
}
private EnumFacing.Axis func_178252_c(JsonObject p_178252_1_)
{
String var2 = JsonUtils.getJsonObjectStringFieldValue(p_178252_1_, "axis");
EnumFacing.Axis var3 = EnumFacing.Axis.byName(var2.toLowerCase());
if (var3 == null)
{
throw new JsonParseException("Invalid rotation axis: " + var2);
}
else
{
return var3;
}
}
private Map func_178250_a(JsonDeserializationContext p_178250_1_, JsonObject p_178250_2_)
{
Map var3 = this.func_178253_b(p_178250_1_, p_178250_2_);
if (var3.isEmpty())
{
throw new JsonParseException("Expected between 1 and 6 unique faces, got 0");
}
else
{
return var3;
}
}
private Map func_178253_b(JsonDeserializationContext p_178253_1_, JsonObject p_178253_2_)
{
EnumMap var3 = Maps.newEnumMap(EnumFacing.class);
JsonObject var4 = JsonUtils.getJsonObject(p_178253_2_, "faces");
Iterator var5 = var4.entrySet().iterator();
while (var5.hasNext())
{
Entry var6 = (Entry)var5.next();
EnumFacing var7 = this.func_178248_a((String)var6.getKey());
var3.put(var7, (BlockPartFace)p_178253_1_.deserialize((JsonElement)var6.getValue(), BlockPartFace.class));
}
return var3;
}
private EnumFacing func_178248_a(String p_178248_1_)
{
EnumFacing var2 = EnumFacing.byName(p_178248_1_);
if (var2 == null)
{
throw new JsonParseException("Unknown facing: " + p_178248_1_);
}
else
{
return var2;
}
}
private Vector3f func_178247_d(JsonObject p_178247_1_)
{
Vector3f var2 = this.func_178251_a(p_178247_1_, "to");
if (var2.x >= -16.0F && var2.y >= -16.0F && var2.z >= -16.0F && var2.x <= 32.0F && var2.y <= 32.0F && var2.z <= 32.0F)
{
return var2;
}
else
{
throw new JsonParseException("\'to\' specifier exceeds the allowed boundaries: " + var2);
}
}
private Vector3f func_178249_e(JsonObject p_178249_1_)
{
Vector3f var2 = this.func_178251_a(p_178249_1_, "from");
if (var2.x >= -16.0F && var2.y >= -16.0F && var2.z >= -16.0F && var2.x <= 32.0F && var2.y <= 32.0F && var2.z <= 32.0F)
{
return var2;
}
else
{
throw new JsonParseException("\'from\' specifier exceeds the allowed boundaries: " + var2);
}
}
private Vector3f func_178251_a(JsonObject p_178251_1_, String p_178251_2_)
{
JsonArray var3 = JsonUtils.getJsonObjectJsonArrayField(p_178251_1_, p_178251_2_);
if (var3.size() != 3)
{
throw new JsonParseException("Expected 3 " + p_178251_2_ + " values, found: " + var3.size());
}
else
{
float[] var4 = new float[3];
for (int var5 = 0; var5 < var4.length; ++var5)
{
var4[var5] = JsonUtils.getJsonElementFloatValue(var3.get(var5), p_178251_2_ + "[" + var5 + "]");
}
return new Vector3f(var4);
}
}
public Object deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_)
{
return this.func_178254_a(p_deserialize_1_, p_deserialize_2_, p_deserialize_3_);
}
}
static final class SwitchEnumFacing
{
static final int[] field_178234_a = new int[EnumFacing.values().length];
private static final String __OBFID = "CL_00002510";
static
{
try
{
field_178234_a[EnumFacing.DOWN.ordinal()] = 1;
}
catch (NoSuchFieldError var6)
{
;
}
try
{
field_178234_a[EnumFacing.UP.ordinal()] = 2;
}
catch (NoSuchFieldError var5)
{
;
}
try
{
field_178234_a[EnumFacing.NORTH.ordinal()] = 3;
}
catch (NoSuchFieldError var4)
{
;
}
try
{
field_178234_a[EnumFacing.SOUTH.ordinal()] = 4;
}
catch (NoSuchFieldError var3)
{
;
}
try
{
field_178234_a[EnumFacing.WEST.ordinal()] = 5;
}
catch (NoSuchFieldError var2)
{
;
}
try
{
field_178234_a[EnumFacing.EAST.ordinal()] = 6;
}
catch (NoSuchFieldError var1)
{
;
}
}
}
}