package crazypants.enderio.machine;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.api.client.render.VertexTransform;
import com.enderio.core.client.render.CustomCubeRenderer;
import com.enderio.core.client.render.TechneModelRenderer;
import com.enderio.core.client.render.TechneUtil;
import com.enderio.core.client.render.VertexRotationFacing;
import com.enderio.core.client.render.VertexTransformComposite;
import com.google.common.collect.ObjectArrays;
import crazypants.enderio.EnderIO;
public class TechneMachineRenderer<T extends AbstractMachineEntity> extends TechneModelRenderer {
private CustomCubeRenderer ccr = new CustomCubeRenderer();
private OverlayRenderer overlay = new OverlayRenderer();
public TechneMachineRenderer(AbstractMachineBlock<T> block, String modelPath) {
super(EnderIO.DOMAIN, modelPath, block.getRenderType(), new VertexTransformComposite(new VertexRotationFacing(ForgeDirection.NORTH)));
}
public TechneMachineRenderer(int renderId, String modelPath) {
super(TechneUtil.getModel(EnderIO.DOMAIN, modelPath), renderId, new VertexTransformComposite(new VertexRotationFacing(ForgeDirection.NORTH)));
}
public TechneMachineRenderer<T> addTransform(VertexTransform vt) {
this.vt = new VertexTransformComposite(ObjectArrays.concat(vt, ((VertexTransformComposite) this.vt).xforms));
return this;
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
setFacingDir(ForgeDirection.SOUTH);
super.renderInventoryBlock(block, metadata, modelId, renderer);
}
@SuppressWarnings("unchecked")
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
T te = (T) world.getTileEntity(x, y, z);
if (te != null) {
setFacingDir(te.getFacingDir());
overlay.setTile(te);
}
super.renderWorldBlock(world, x, y, z, block, modelId, renderer);
if (renderer.overrideBlockTexture == null) {
ccr.renderBlock(world, block, x, y, z, overlay);
}
return true;
}
@Override
protected IIcon getModelIcon(Block block, int metadata) {
return ((AbstractMachineBlock<?>) block).getModelIcon();
}
@Override
protected IIcon getModelIcon(IBlockAccess world, int x, int y, int z, Block block) {
return getModelIcon(block, 0);
}
private void setFacingDir(ForgeDirection dir) {
VertexRotationFacing rot = (VertexRotationFacing) ((VertexTransformComposite) vt).xforms[0];
rot.setRotation(dir);
}
}