/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Feb 2, 2014, 6:34:45 PM (GMT)]
*/
package vazkii.botania.client.render.tile;
import javax.annotation.Nonnull;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.client.core.helper.RenderHelper;
import vazkii.botania.client.model.ModelSpinningCubes;
import vazkii.botania.common.block.tile.TileRuneAltar;
public class RenderTileRuneAltar extends TileEntitySpecialRenderer<TileRuneAltar> {
final ModelSpinningCubes cubes = new ModelSpinningCubes();
@Override
public void renderTileEntityAt(@Nonnull TileRuneAltar altar, double x, double y, double z, float partticks, int digProgress) {
GlStateManager.pushMatrix();
GlStateManager.color(1F, 1F, 1F, 1F);
GlStateManager.translate(x, y, z);
int items = 0;
for(int i = 0; i < altar.getSizeInventory(); i++)
if(altar.getItemHandler().getStackInSlot(i).isEmpty())
break;
else items++;
float[] angles = new float[altar.getSizeInventory()];
float anglePer = 360F / items;
float totalAngle = 0F;
for(int i = 0; i < angles.length; i++)
angles[i] = totalAngle += anglePer;
double time = ClientTickHandler.ticksInGame + partticks;
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
for(int i = 0; i < altar.getSizeInventory(); i++) {
GlStateManager.pushMatrix();
GlStateManager.translate(0.5F, 1.25F, 0.5F);
GlStateManager.rotate(angles[i] + (float) time, 0F, 1F, 0F);
GlStateManager.translate(1.125F, 0F, 0.25F);
GlStateManager.rotate(90F, 0F, 1F, 0F);
GlStateManager.translate(0D, 0.075 * Math.sin((time + i * 10) / 5D), 0F);
ItemStack stack = altar.getItemHandler().getStackInSlot(i);
Minecraft mc = Minecraft.getMinecraft();
if(!stack.isEmpty()) {
mc.getRenderItem().renderItem(stack, ItemCameraTransforms.TransformType.GROUND);
}
GlStateManager.popMatrix();
}
GlStateManager.disableAlpha();
GlStateManager.pushMatrix();
GlStateManager.translate(0.5F, 1.8F, 0.5F);
GlStateManager.rotate(180F, 1F, 0F, 1F);
int repeat = 15;
cubes.renderSpinningCubes(2, repeat, repeat);
GlStateManager.popMatrix();
GlStateManager.translate(0F, 0.2F, 0F);
float scale = altar.getTargetMana() == 0 ? 0 : (float) altar.getCurrentMana() / (float) altar.getTargetMana() / 75F;
if(scale != 0) {
int seed = altar.getPos().getX() ^ altar.getPos().getY() ^ altar.getPos().getZ();
GlStateManager.translate(0.5F, 0.7F, 0.5F);
RenderHelper.renderStar(0x00E4D7, scale, scale, scale, seed);
}
GlStateManager.enableAlpha();
GlStateManager.popMatrix();
}
}