/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.core.render;
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.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import forestry.apiculture.render.ModelAnalyzer;
import forestry.core.gadgets.TileAnalyzer;
import forestry.core.interfaces.IBlockRenderer;
public class RenderAnalyzer extends TileEntitySpecialRenderer implements IBlockRenderer {
private ModelAnalyzer model;
private final EntityItem dummyEntityItem = new EntityItem(null);
private final RenderItem customRenderItem;
private long lastTick;
public RenderAnalyzer() {
customRenderItem = new RenderItem() {
@Override
public boolean shouldBob() {
return true;
}
@Override
public boolean shouldSpreadItems() {
return false;
};
};
customRenderItem.setRenderManager(RenderManager.instance);
}
public RenderAnalyzer(String baseTexture) {
this();
this.model = new ModelAnalyzer(baseTexture);
}
@Override
public void inventoryRender(double x, double y, double z, float f, float f1) {
render(null, null, ForgeDirection.WEST, x, y, z);
}
@Override
public void renderTileEntityAt(TileEntity tile, double d, double d1, double d2, float f) {
TileAnalyzer analyzer = (TileAnalyzer) tile;
render(analyzer.getIndividualOnDisplay(), tile.getWorldObj(), analyzer.getOrientation(), d, d1, d2);
}
private void render(ItemStack itemstack, World world, ForgeDirection orientation, double x, double y, double z) {
dummyEntityItem.worldObj = world;
model.render(orientation, (float) x, (float) y, (float) z);
if (itemstack == null)
return;
float renderScale = 1.0f;
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z);
GL11.glTranslatef(0.5f, 0.2f, 0.5f);
GL11.glScalef(renderScale, renderScale, renderScale);
dummyEntityItem.setEntityItemStack(itemstack);
if (world.getTotalWorldTime() != lastTick) {
lastTick = world.getTotalWorldTime();
dummyEntityItem.onUpdate();
}
customRenderItem.doRender(dummyEntityItem, 0, 0, 0, 0, 0);
GL11.glPopMatrix();
}
}