package joshie.harvest.core.render;
import joshie.harvest.core.HFCore;
import joshie.harvest.core.block.BlockStorage.Storage;
import joshie.harvest.core.entity.EntityBasket;
import joshie.harvest.core.lib.HFModInfo;
import joshie.harvest.core.tile.TileBasket;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import java.util.Random;
@SideOnly(Side.CLIENT)
public class RenderBasket extends Render<EntityBasket> {
protected final ResourceLocation texture;
private final IBlockState state = HFCore.STORAGE.getStateFromEnum(Storage.BASKET);
private final RenderItem itemRenderer;
private final Random random = new Random();
public RenderBasket(RenderManager manager) {
super(manager);
shadowSize = 1F;
texture = new ResourceLocation(HFModInfo.MODID, "textures/models/basket.png");
itemRenderer = Minecraft.getMinecraft().getRenderItem();
}
@Override
@Nonnull
protected ResourceLocation getEntityTexture(EntityBasket entity) {
return TextureMap.LOCATION_BLOCKS_TEXTURE;
}
@Override
public void doRender(EntityBasket entity, double x, double y, double z, float entityYaw, float partialTicks) {
if (state.getRenderType() == EnumBlockRenderType.MODEL) {
World world = entity.getEntityWorld();
if (state != world.getBlockState(new BlockPos(entity)) && state.getRenderType() != EnumBlockRenderType.INVISIBLE) {
bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
GlStateManager.pushMatrix();
GlStateManager.disableLighting();
Tessellator tessellator = Tessellator.getInstance();
VertexBuffer vertexbuffer = tessellator.getBuffer();
if (renderOutlines) {
GlStateManager.enableColorMaterial();
GlStateManager.enableOutlineMode(this.getTeamColor(entity));
}
vertexbuffer.begin(7, DefaultVertexFormats.BLOCK);
BlockPos blockpos = new BlockPos(entity.posX, entity.getEntityBoundingBox().maxY, entity.posZ);
GlStateManager.translate((float)(x - (double)blockpos.getX() - 0.5D), (float)(y - (double)blockpos.getY() + 0.5F), (float)(z - (double)blockpos.getZ() - 0.5D));
BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
blockrendererdispatcher.getBlockModelRenderer().renderModel(world, blockrendererdispatcher.getModelForState(state), state, blockpos, vertexbuffer, false, MathHelper.getPositionRandom(entity.getPosition()));
tessellator.draw();
if (renderOutlines) {
GlStateManager.disableOutlineMode();
GlStateManager.disableColorMaterial();
}
GlStateManager.enableLighting();
GlStateManager.popMatrix();
}
}
if (entity.getEntityItem() != null && entity.getEntityItem().getItem() != TileBasket.STONE) {
renderItem(entity, x, y, z);
}
}
private void renderItem(EntityBasket entity, double x, double y, double z) {
ItemStack itemstack = entity.getEntityItem();
int i;
if (itemstack != null && itemstack.getItem() != null)
{
i = Item.getIdFromItem(itemstack.getItem()) + itemstack.getMetadata();
}
else
{
i = 187;
}
this.random.setSeed((long)i);
boolean flag = false;
if (this.bindEntityTexture(entity))
{
this.renderManager.renderEngine.getTexture(this.getEntityTexture(entity)).setBlurMipmap(false, false);
flag = true;
}
GlStateManager.enableRescaleNormal();
GlStateManager.alphaFunc(516, 0.1F);
GlStateManager.enableBlend();
RenderHelper.enableStandardItemLighting();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.pushMatrix();
GlStateManager.translate(0F, 2F, 0F);
IBakedModel ibakedmodel = this.itemRenderer.getItemModelWithOverrides(itemstack, entity.worldObj, null);
int j = 3;
boolean flag1 = ibakedmodel.isGui3d();
if (!flag1)
{
float f3 = -0.0F * (float)(j - 1) * 0.5F;
float f4 = -0.0F * (float)(j - 1) * 0.5F;
float f5 = -0.09375F * (float)(j - 1) * 0.5F;
GlStateManager.translate(f3, f4, f5);
}
if (this.renderOutlines)
{
GlStateManager.enableColorMaterial();
GlStateManager.enableOutlineMode(this.getTeamColor(entity));
}
for (int k = 0; k < j; ++k)
{
if (flag1)
{
GlStateManager.pushMatrix();
if (k > 0)
{
float f6 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F;
GlStateManager.translate(0, 0, f6);
}
ibakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GROUND, false);
this.itemRenderer.renderItem(itemstack, ibakedmodel);
GlStateManager.popMatrix();
}
else
{
GlStateManager.pushMatrix();
if (k > 0)
{
float f8 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F;
float f10 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F;
GlStateManager.translate(f8, f10, 0.0F);
}
ibakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GROUND, false);
this.itemRenderer.renderItem(itemstack, ibakedmodel);
GlStateManager.popMatrix();
GlStateManager.translate(0.0F, 0.0F, 0.09375F);
}
}
if (this.renderOutlines)
{
GlStateManager.disableOutlineMode();
GlStateManager.disableColorMaterial();
}
GlStateManager.popMatrix();
GlStateManager.disableRescaleNormal();
GlStateManager.disableBlend();
this.bindEntityTexture(entity);
if (flag)
{
this.renderManager.renderEngine.getTexture(this.getEntityTexture(entity)).restoreLastBlurMipmap();
}
}
}