// Path: src/main/java/com/github/worldsender/mcanm/client/IRenderPass.java
// public interface IRenderPass extends IRenderPassInformation {
// 	/**
// 	 * Binds the resource-location given.<br>
// 	 * <b>WARNING</b> This does not transform the resourc-location via
// 	 * {@link #getActualResourceLocation(ResourceLocation)}. This has the be done before calling this method.
// 	 *
// 	 * @param resLoc
// 	 *            the resource to bind
// 	 */
// 	void bindTexture(ResourceLocation resLoc);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/client/model/IEntityRender.java
// public interface IEntityRender<T extends EntityLiving> {
// 	/**
// 	 * Retrieves the current animator
// 	 *
// 	 * @return
// 	 */
// 	IEntityAnimator<T> getAnimator();
// 
// 	/**
// 	 * Binds a texture
// 	 */
// 	void bindTextureFrom(ResourceLocation resLoc);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/client/model/IRenderPassInformation.java
// public interface IRenderPassInformation extends IModelStateInformation {
// 	/**
// 	 * Retrieves the texture that should go into the texture slot slot
// 	 * 
// 	 * @param slot
// 	 *            the name of the texture slot getting polled
// 	 * @return the resource location of the texture to stick
// 	 */
// 	ResourceLocation getActualResourceLocation(String slot);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/common/animation/IAnimation.java
// public interface IAnimation {
// 	/**
// 	 * Describes a BoneTransformation, including rotation, translation and scaling. This class is opaque i.e. all
// 	 * getters and setters don't make defensive copies and states can be manipulated from the outside.
// 	 *
// 	 * @author WorldSEnder
// 	 *
// 	 */
// 	public static class BoneTransformation {
// 		public static final BoneTransformation identity = new BoneTransformation();
// 
// 		private static Vector3f identityScale() {
// 			return new Vector3f(1.0F, 1.0F, 1.0F);
// 		}
// 
// 		public final Matrix4f matrix;
// 
// 		public BoneTransformation() {
// 			this(null, null, null);
// 		}
// 
// 		public BoneTransformation(Vector3f translation, Quat4f quat) {
// 			this(translation, quat, identityScale());
// 		}
// 
// 		public BoneTransformation(Vector3f translation, Quat4f quat, Vector3f scale) {
// 			if (quat == null)
// 				quat = new Quat4f();
// 			if (translation == null)
// 				translation = new Vector3f();
// 			if (scale == null)
// 				scale = identityScale();
// 			this.matrix = Utils.fromRTS(quat, translation, scale, new Matrix4f());
// 		}
// 
// 		public Matrix4f getMatrix() {
// 			return matrix;
// 		}
// 	}
// 
// 	/**
// 	 * Stores the bone's current {@link BoneTransformation} in transform(identified by name). <br>
// 	 * If the requested bone is not known to the animation transform is left untouched and this return
// 	 * <code>false</code>. Otherwise transform is set to the bone's current transform state.
// 	 *
// 	 * @param bone
// 	 *            the name of the bone the matrix is requested
// 	 * @param frame
// 	 *            the current frame in the animation
// 	 * @param transform
// 	 *            the transform to set
// 	 * @return if a transformation has been set
// 	 */
// 	public boolean storeCurrentTransformation(String bone, float frame, BoneTransformation transform);
// }


import java.util.Objects;
import com.github.worldsender.mcanm.client.IRenderPass;
import com.github.worldsender.mcanm.client.model.IEntityRender;
import com.github.worldsender.mcanm.client.model.IRenderPassInformation;
import com.github.worldsender.mcanm.common.animation.IAnimation;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.ResourceLocation;

package com.github.worldsender.mcanm.client.model.util;




/**
 * A collection of information neccessary to render the model.
 *
 * @author WorldSEnder
 *
 */
public class RenderPass<T extends EntityLiving> implements IRenderPass {
	private IRenderPassInformation userInfo;

// Path: src/main/java/com/github/worldsender/mcanm/client/IRenderPass.java
// public interface IRenderPass extends IRenderPassInformation {
// 	/**
// 	 * Binds the resource-location given.<br>
// 	 * <b>WARNING</b> This does not transform the resourc-location via
// 	 * {@link #getActualResourceLocation(ResourceLocation)}. This has the be done before calling this method.
// 	 *
// 	 * @param resLoc
// 	 *            the resource to bind
// 	 */
// 	void bindTexture(ResourceLocation resLoc);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/client/model/IEntityRender.java
// public interface IEntityRender<T extends EntityLiving> {
// 	/**
// 	 * Retrieves the current animator
// 	 *
// 	 * @return
// 	 */
// 	IEntityAnimator<T> getAnimator();
// 
// 	/**
// 	 * Binds a texture
// 	 */
// 	void bindTextureFrom(ResourceLocation resLoc);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/client/model/IRenderPassInformation.java
// public interface IRenderPassInformation extends IModelStateInformation {
// 	/**
// 	 * Retrieves the texture that should go into the texture slot slot
// 	 * 
// 	 * @param slot
// 	 *            the name of the texture slot getting polled
// 	 * @return the resource location of the texture to stick
// 	 */
// 	ResourceLocation getActualResourceLocation(String slot);
// }
// 
// Path: src/main/java/com/github/worldsender/mcanm/common/animation/IAnimation.java
// public interface IAnimation {
// 	/**
// 	 * Describes a BoneTransformation, including rotation, translation and scaling. This class is opaque i.e. all
// 	 * getters and setters don't make defensive copies and states can be manipulated from the outside.
// 	 *
// 	 * @author WorldSEnder
// 	 *
// 	 */
// 	public static class BoneTransformation {
// 		public static final BoneTransformation identity = new BoneTransformation();
// 
// 		private static Vector3f identityScale() {
// 			return new Vector3f(1.0F, 1.0F, 1.0F);
// 		}
// 
// 		public final Matrix4f matrix;
// 
// 		public BoneTransformation() {
// 			this(null, null, null);
// 		}
// 
// 		public BoneTransformation(Vector3f translation, Quat4f quat) {
// 			this(translation, quat, identityScale());
// 		}
// 
// 		public BoneTransformation(Vector3f translation, Quat4f quat, Vector3f scale) {
// 			if (quat == null)
// 				quat = new Quat4f();
// 			if (translation == null)
// 				translation = new Vector3f();
// 			if (scale == null)
// 				scale = identityScale();
// 			this.matrix = Utils.fromRTS(quat, translation, scale, new Matrix4f());
// 		}
// 
// 		public Matrix4f getMatrix() {
// 			return matrix;
// 		}
// 	}
// 
// 	/**
// 	 * Stores the bone's current {@link BoneTransformation} in transform(identified by name). <br>
// 	 * If the requested bone is not known to the animation transform is left untouched and this return
// 	 * <code>false</code>. Otherwise transform is set to the bone's current transform state.
// 	 *
// 	 * @param bone
// 	 *            the name of the bone the matrix is requested
// 	 * @param frame
// 	 *            the current frame in the animation
// 	 * @param transform
// 	 *            the transform to set
// 	 * @return if a transformation has been set
// 	 */
// 	public boolean storeCurrentTransformation(String bone, float frame, BoneTransformation transform);
// }


// Path: src/main/java/com/github/worldsender/mcanm/client/model/util/RenderPass.java
import java.util.Objects;
import com.github.worldsender.mcanm.client.IRenderPass;
import com.github.worldsender.mcanm.client.model.IEntityRender;
import com.github.worldsender.mcanm.client.model.IRenderPassInformation;
import com.github.worldsender.mcanm.common.animation.IAnimation;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.ResourceLocation;

package com.github.worldsender.mcanm.client.model.util;




/**
 * A collection of information neccessary to render the model.
 *
 * @author WorldSEnder
 *
 */
public class RenderPass<T extends EntityLiving> implements IRenderPass {
	private IRenderPassInformation userInfo;

	private IEntityRender<T> render;
