package zmaster587.advancedRocketry.client.render.multiblocks;
import java.util.List;
import org.lwjgl.opengl.GL11;
import zmaster587.libVulpes.block.RotatableBlock;
import zmaster587.libVulpes.tile.multiblock.TileMultiblockMachine;
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;
public class RendererCrystallizer extends TileEntitySpecialRenderer {
IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("advancedrocketry:models/crystallizer.obj"));
ResourceLocation texture = new ResourceLocation("advancedrocketry:textures/models/crystallizer.png");
private final RenderItem dummyItem = new RenderItem();
public RendererCrystallizer() {
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);
bindTexture(texture);
model.renderPart("Hull");
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;
int rotation = (int)(tile.getWorldObj().getTotalWorldTime() % 360);
GL11.glPushMatrix();
GL11.glTranslatef(0, 1, 0);
GL11.glPushMatrix();
GL11.glTranslated(1, 0.2, 0.7);
GL11.glRotatef(rotation, 0, 1, 0);
GL11.glScalef(progress, progress, progress);
dummyItem.doRender(entity, 0,0,0, 0.0F, 0.0F);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(1, 0.2, 1.5);
GL11.glRotatef(rotation, 0, 1, 0);
GL11.glScalef(progress, progress, progress);
dummyItem.doRender(entity, 0,0,0, 0.0F, 0.0F);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(1, 0.2, 2.3);
GL11.glRotatef(rotation, 0, 1, 0);
GL11.glScalef(progress, progress, progress);
dummyItem.doRender(entity, 0,0,0, 0.0F, 0.0F);
GL11.glPopMatrix();
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA );
int color = stack.getItem().getColorFromItemStack(stack, 0);
float divisor = 1/255f;
GL11.glColor4f((color & 0xFF)*divisor*.5f, ((color & 0xFF00) >>> 8)*divisor*.5f, ((color & 0xFF0000) >>> 16)*divisor*.5f, 0xE4*divisor);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glTranslatef(0, 1.1f, 0);
//Fill before emptying
if(progress < 0.05)
GL11.glScaled(1, 20*progress, 1);
else
GL11.glScaled(1, (1.1-(progress*1.111)), 1);
GL11.glTranslatef(0, -1.1f, 0);
model.renderPart("Liquid");
}
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
}
else {
bindTexture(texture);
model.renderPart("Hull");
}
GL11.glPopMatrix();
}
}