package joshie.harvest.cooking.render; import joshie.harvest.cooking.tile.TileOven; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import static joshie.harvest.core.lib.HFModInfo.MODID; import static net.minecraft.util.EnumFacing.*; @SideOnly(Side.CLIENT) public class SpecialRendererOven extends SpecialRendererCookware<TileOven> { private static final ResourceLocation TEXTURE = new ResourceLocation(MODID, "textures/models/oven_door.png"); private final ModelOvenDoor ovenModel = new ModelOvenDoor(); @Override public void translateIngredient(boolean isBlock, float position, float rotation, float offset1, float offset2) { GlStateManager.translate(0.5F, 0.11F, 0.5F); GlStateManager.scale(0.4F, 0.4F, 0.4F); if (!isBlock) { GlStateManager.rotate(-90, 1F, 0F, 0F); GlStateManager.rotate(rotation, 0F, 0F, 1F); GlStateManager.translate(offset1, offset2, position); } else { GlStateManager.rotate(90, 1F, 0F, 0F); GlStateManager.translate(offset1 * 1.4F, 0.8F - offset2 * 2.5F, position - 1F); } } @Override public void translateResult(boolean isBlock) { GlStateManager.translate(0.5F, 0.32F, 0.5F); GlStateManager.scale(0.4F, 0.4F, 0.4F); if (!isBlock) { GlStateManager.rotate(-90, 1F, 0F, 0F); } else { GlStateManager.rotate(90, 0F, 1F, 0F); } } @Override public void renderTileEntityAt(TileOven oven, double x, double y, double z, float partialTicks, int destroyStage) { if (destroyStage >= 0) { bindTexture(DESTROY_STAGES[destroyStage]); GlStateManager.matrixMode(5890); GlStateManager.pushMatrix(); GlStateManager.scale(4.0F, 4.0F, 1.0F); GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); GlStateManager.matrixMode(5888); } else { bindTexture(TEXTURE); } GlStateManager.pushMatrix(); GlStateManager.enableRescaleNormal(); if (destroyStage < 0) GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.translate((float) x, (float) y + 1.0F, (float) z + 1.0F); GlStateManager.scale(1.0F, -1.0F, -1.0F); EnumFacing facing = oven.getFacing(); int j = facing == NORTH ? 180 : facing == SOUTH ? 0 : facing == WEST ? 90 : -90; if (facing == SOUTH) GlStateManager.translate(1F, 0F, 1F); else if (facing == WEST) GlStateManager.translate(1F, 0F, 0F); else if (facing == EAST) GlStateManager.translate(0F, 0F, 1F); GlStateManager.rotate((float) j, 0.0F, 1.0F, 0.0F); GlStateManager.translate(-0.5F, -0.5F, -0.5F); float f = oven.prevLidAngle + (oven.lidAngle - oven.prevLidAngle) * partialTicks; f = 1.0F - f; f = 1.0F - f * f * f; ovenModel.door.rotateAngleX = -(f * ((float) Math.PI / 2F)); ovenModel.renderAll(); GlStateManager.disableRescaleNormal(); GlStateManager.popMatrix(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); if (destroyStage >= 0) { GlStateManager.matrixMode(5890); GlStateManager.popMatrix(); GlStateManager.matrixMode(5888); } //Only render the internals if the oven is open if (oven.lidAngle != 0F) super.renderTileEntityAt(oven, x, y, z, partialTicks, destroyStage); } }