package zmaster587.advancedRocketry.client.render.multiblocks;
import java.util.List;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import zmaster587.libVulpes.block.RotatableBlock;
import zmaster587.libVulpes.tile.multiblock.TileMultiblockMachine;
public class RendererCuttingMachine extends TileEntitySpecialRenderer {
IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("advancedrocketry:models/cuttingMachine.obj"));
public static ResourceLocation texture = new ResourceLocation("advancedrocketry:textures/models/cuttingMachine.png");
private final RenderItem dummyItem = new RenderItem();
public RendererCuttingMachine() {
dummyItem.setRenderManager(RenderManager.instance);
}
@Override
public void renderTileEntityAt(TileEntity tile, double x,
double y, double z, float f) {
TileMultiblockMachine multiBlockTile = (TileMultiblockMachine)tile;
if(!multiBlockTile.canRender())
return;
GL11.glPushMatrix();
//Initial setup
int bright = tile.getWorldObj().getLightBrightnessForSkyBlocks(tile.xCoord, tile.yCoord + 1, tile.zCoord,0);
int brightX = bright % 65536;
int brightY = bright / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY);
//Rotate and move the model into position
GL11.glTranslated(x+.5f, y, z + 0.5f);
ForgeDirection front = RotatableBlock.getFront(tile.getBlockMetadata());
GL11.glRotatef((front.offsetX == 1 ? 180 : 0) + front.offsetZ*90f, 0, 1, 0);
GL11.glTranslated(-.5f, 0, -1.5f);
if(multiBlockTile.isRunning()) {
float progress = multiBlockTile.getProgress(0)/(float)multiBlockTile.getTotalProgress(0);
float tray;
tray = 2.2f*progress;
List<ItemStack> outputList = multiBlockTile.getOutputs();
if(outputList != null && !outputList.isEmpty()) {
ItemStack stack = outputList.get(0);
EntityItem entity = new EntityItem(tile.getWorldObj());
entity.setEntityItemStack(stack);
entity.hoverStart = 0;
GL11.glPushMatrix();
GL11.glRotatef(90, 1, 0, 0);
dummyItem.doRender(entity, 1, tray + .25, -1.05, 0.0F, 0.0F);
GL11.glPopMatrix();
}
bindTexture(texture);
model.renderPart("Hull");
GL11.glPushMatrix();
GL11.glTranslatef(1f, 1f, 1.5f);
GL11.glRotatef(-6*multiBlockTile.getProgress(0) % 360, 1, 0, 0);
GL11.glTranslatef(-1f, -1f, -1.5f);
model.renderPart("Saw");
GL11.glPopMatrix();
}
else {
bindTexture(texture);
model.renderAll();
}
GL11.glPopMatrix();
}
}