package mekanism.generators.client.render; import mekanism.api.Coord4D; import mekanism.client.render.FluidRenderer; import mekanism.client.render.FluidRenderer.RenderData; import mekanism.client.render.MekanismRenderer; import mekanism.common.content.tank.TankUpdateProtocol; import mekanism.generators.common.tile.turbine.TileEntityTurbineCasing; import mekanism.generators.common.tile.turbine.TileEntityTurbineRotor; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public class RenderIndustrialTurbine extends TileEntitySpecialRenderer { private Fluid STEAM = FluidRegistry.getFluid("steam"); @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick, int destroyStage) { renderAModelAt((TileEntityTurbineCasing)tileEntity, x, y, z, partialTick, destroyStage); } public void renderAModelAt(TileEntityTurbineCasing tileEntity, double x, double y, double z, float partialTick, int destroyStage) { if(tileEntity.clientHasStructure && tileEntity.isRendering && tileEntity.structure != null && tileEntity.structure.complex != null) { RenderTurbineRotor.internalRender = true; Coord4D coord = tileEntity.structure.complex; while(true) { coord = coord.offset(EnumFacing.DOWN); TileEntity tile = coord.getTileEntity(tileEntity.getWorld()); if(!(tile instanceof TileEntityTurbineRotor)) { break; } TileEntityRendererDispatcher.instance.renderTileEntity(tile, partialTick, destroyStage); } RenderTurbineRotor.internalRender = false; if(tileEntity.structure.fluidStored != null && tileEntity.structure.fluidStored.amount != 0 && tileEntity.structure.volLength > 0) { RenderData data = new RenderData(); data.location = tileEntity.structure.renderLocation; data.height = tileEntity.structure.lowerVolume/(tileEntity.structure.volLength*tileEntity.structure.volWidth); data.length = tileEntity.structure.volLength; data.width = tileEntity.structure.volWidth; data.fluidType = STEAM; bindTexture(MekanismRenderer.getBlocksTexture()); if(data.location != null && data.height >= 1 && tileEntity.structure.fluidStored.getFluid() != null) { FluidRenderer.push(); FluidRenderer.translateToOrigin(data.location); MekanismRenderer.glowOn(tileEntity.structure.fluidStored.getFluid().getLuminosity()); MekanismRenderer.colorFluid(tileEntity.structure.fluidStored.getFluid()); GL11.glColor4f(1F, 1F, 1F, Math.min(1, ((float)tileEntity.structure.fluidStored.amount / (float)tileEntity.structure.getFluidCapacity())+MekanismRenderer.GAS_RENDER_BASE)); FluidRenderer.getTankDisplay(data).render(); MekanismRenderer.glowOff(); MekanismRenderer.resetColor(); FluidRenderer.pop(); } } } } private int getStages(int height) { return TankUpdateProtocol.FLUID_PER_TANK/10; } }