package micdoodle8.mods.galacticraft.core.wrappers;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType;
import net.minecraft.client.renderer.block.model.ItemTransformVec3f;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.*;
import org.apache.commons.lang3.tuple.Pair;
import javax.vecmath.Matrix4f;
import java.util.List;
@SuppressWarnings({ "deprecation", "unchecked" })
public abstract class ModelTransformWrapper implements IFlexibleBakedModel, ISmartItemModel, ISmartBlockModel, IPerspectiveAwareModel
{
private final IBakedModel iBakedModel;
public ModelTransformWrapper(IBakedModel i_modelToWrap)
{
this.iBakedModel = i_modelToWrap;
}
protected abstract Matrix4f getTransformForPerspective(TransformType cameraTransformType);
@Override
public Pair<? extends IFlexibleBakedModel, Matrix4f> handlePerspective(TransformType cameraTransformType)
{
Matrix4f matrix4f = getTransformForPerspective(cameraTransformType);
if (matrix4f == null)
{
return Pair.of(this, TRSRTransformation.blockCornerToCenter(new TRSRTransformation(ItemTransformVec3f.DEFAULT)).getMatrix());
}
return Pair.of(this, matrix4f);
}
@Override
public List getFaceQuads(EnumFacing enumFacing)
{
return iBakedModel.getFaceQuads(enumFacing);
}
@Override
public List getGeneralQuads()
{
return iBakedModel.getGeneralQuads();
}
@Override
public VertexFormat getFormat()
{
if (iBakedModel instanceof IFlexibleBakedModel)
{
return ((IFlexibleBakedModel) iBakedModel).getFormat();
}
else
{
return Attributes.DEFAULT_BAKED_FORMAT;
}
}
@Override
public boolean isAmbientOcclusion()
{
return iBakedModel.isAmbientOcclusion();
}
@Override
public boolean isGui3d()
{
return iBakedModel.isGui3d();
}
@Override
public boolean isBuiltInRenderer()
{
return iBakedModel.isBuiltInRenderer();
}
@Override
public TextureAtlasSprite getParticleTexture()
{
return iBakedModel.getParticleTexture();
}
@Override
public ItemCameraTransforms getItemCameraTransforms()
{
return ItemCameraTransforms.DEFAULT;
}
@Override
public IBakedModel handleItemState(ItemStack stack)
{
return this;
}
@Override
public IBakedModel handleBlockState(IBlockState state)
{
return this;
}
}