package joshie.harvest.core.base.render; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL14; import static net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType.FIXED; import static net.minecraft.client.renderer.texture.TextureMap.LOCATION_BLOCKS_TEXTURE; import static net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX; public class TileSpecialRendererItem<T extends TileEntity> extends TileEntitySpecialRenderer<T> { protected static final Minecraft MINECRAFT = Minecraft.getMinecraft(); protected void renderItem(ItemStack stack, RenderData render, int i) { renderItem(stack, render.heightOffset[i], render.rotations[i], render.offset1[i], render.offset2[i]); } protected void translateItem(boolean isBlock, float position, float rotation, float offset1, float offset2) { GlStateManager.translate(0.5F, 0.05F, 0.5F); GlStateManager.rotate(-15, 0F, 1F, 0F); GlStateManager.scale(0.25F, 0.25F, 0.25F); if (!isBlock) { GlStateManager.rotate(rotation, 0F, 1F, 0F); GlStateManager.rotate(-190, 0F, 1F, 0F); GlStateManager.translate(offset1 * 3F, offset2 * 3.5F, position * 0.75F); } else { GlStateManager.rotate(90, 1F, 0F, 0F); GlStateManager.translate(offset1 * 1.4F, 0.8F - offset2 * 2.5F, position - 1F); } } protected void renderItem(ItemStack stack, float position, float rotation, float offset1, float offset2) { GlStateManager.pushMatrix(); RenderHelper.disableStandardItemLighting(); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); if (Minecraft.isAmbientOcclusionEnabled()) { GL11.glShadeModel(GL11.GL_SMOOTH); } else { GL11.glShadeModel(GL11.GL_FLAT); } translateItem(stack.getItem() instanceof ItemBlock, position, rotation, offset1, offset2); GlStateManager.blendFunc(GL11.GL_CONSTANT_ALPHA, GL11.GL_ONE_MINUS_CONSTANT_ALPHA); GL14.glBlendColor(1F, 1F, 1F, 1F); MINECRAFT.getRenderItem().renderItem(stack, FIXED); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.disableBlend(); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } @SuppressWarnings("ConstantConditions") protected void renderFluidCube(ResourceLocation fluid, float x, float y, float z, float size) { GlStateManager.pushMatrix(); GlStateManager.translate(x, y, z); RenderHelper.disableStandardItemLighting(); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); Tessellator tessellator = Tessellator.getInstance(); VertexBuffer vb = tessellator.getBuffer(); TextureAtlasSprite sprite = MINECRAFT.getTextureMapBlocks().getTextureExtry(fluid.toString()); if (sprite != null) { MINECRAFT.renderEngine.bindTexture(LOCATION_BLOCKS_TEXTURE); double uMin = (double) sprite.getMinU(); double uMax = (double) sprite.getMaxU(); double vMin = (double) sprite.getMinV(); double vMax = (double) sprite.getMaxV(); //Draw Top // vb.begin(7, POSITION_TEX); vb.pos(size / 2f, 0, size / 2f).tex(uMax, vMax).endVertex(); vb.pos(size / 2f, 0, -size / 2f).tex(uMax, vMin).endVertex(); vb.pos(-size / 2f, 0, -size / 2f).tex(uMin, vMin).endVertex(); vb.pos(-size / 2f, 0, size / 2f).tex(uMin, vMax).endVertex(); tessellator.draw(); //Draw Bottom vb.begin(7, POSITION_TEX); vb.pos(size / 2f, -size / 2f, -size / 2f).tex(uMax, vMax).endVertex();//Top Right vb.pos(size / 2f, -size / 2f, size / 2f).tex(uMax, vMin).endVertex(); //Top Left vb.pos(-size / 2f, -size / 2f, size / 2f).tex(uMin, vMin).endVertex(); //Bottom Left vb.pos(-size / 2f, -size / 2f, -size / 2f).tex(uMin, vMax).endVertex(); //Bottom Right tessellator.draw(); //Draw Side 1 vb.begin(7, POSITION_TEX); vb.pos(-size / 2f, 0, size / 2f).tex(uMax, vMax).endVertex(); vb.pos(-size / 2f, 0, -size / 2f).tex(uMax, vMin).endVertex(); vb.pos(-size / 2f, -size / 2f, -size / 2f).tex(uMin, vMin).endVertex(); vb.pos(-size / 2f, -size / 2f, size / 2f).tex(uMin, vMax).endVertex(); tessellator.draw(); //Draw Side 2 vb.begin(7, POSITION_TEX); vb.pos(size / 2f, 0, -size / 2f).tex(uMax, vMax).endVertex(); vb.pos(size / 2f, 0, size / 2f).tex(uMax, vMin).endVertex(); vb.pos(size / 2f, -size / 2f, size / 2f).tex(uMin, vMin).endVertex(); vb.pos(size / 2f, -size / 2f, -size / 2f).tex(uMin, vMax).endVertex(); tessellator.draw(); //Draw Side 3 vb.begin(7, POSITION_TEX); vb.pos(size / 2f, 0, size / 2f).tex(uMax, vMax).endVertex(); // Top Right vb.pos(-size / 2f, 0, size / 2f).tex(uMax, vMin).endVertex(); //Top Left vb.pos(-size / 2f, -size / 2f, size / 2f).tex(uMin, vMin).endVertex(); //Bottom Left vb.pos(size / 2f, -size / 2f, size / 2f).tex(uMin, vMax).endVertex(); //Bottom Right tessellator.draw(); //Draw Side 2 vb.begin(7, POSITION_TEX); vb.pos(-size / 2f, 0, -size / 2f).tex(uMax, vMax).endVertex(); //Top Right vb.pos(size / 2f, 0, -size / 2f).tex(uMax, vMin).endVertex(); //Top Left vb.pos(size / 2f, -size / 2f, -size / 2f).tex(uMin, vMin).endVertex(); //Bottom Left vb.pos(-size / 2f, -size / 2f, -size / 2f).tex(uMin, vMax).endVertex(); //Bottom Right tessellator.draw(); } GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.disableBlend(); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } @SuppressWarnings("ConstantConditions") protected void renderFluidPlane(ResourceLocation fluid, float x, float y, float z, float width, float length) { GlStateManager.pushMatrix(); GlStateManager.translate(x, y, z); RenderHelper.disableStandardItemLighting(); GlStateManager.enableBlend(); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); Tessellator tessellator = Tessellator.getInstance(); VertexBuffer vb = tessellator.getBuffer(); TextureAtlasSprite sprite = MINECRAFT.getTextureMapBlocks().getTextureExtry(fluid.toString()); if (sprite != null) { MINECRAFT.renderEngine.bindTexture(LOCATION_BLOCKS_TEXTURE); double uMin = (double) sprite.getMinU(); double uMax = (double) sprite.getMaxU(); double vMin = (double) sprite.getMinV(); double vMax = (double) sprite.getMaxV(); vb.begin(7, POSITION_TEX); vb.pos(width / 2f, 0, length / 2f).tex(uMax, vMax).endVertex(); vb.pos(width / 2f, 0, -length / 2f).tex(uMax, vMin).endVertex(); vb.pos(-width / 2f, 0, -length / 2f).tex(uMin, vMin).endVertex(); vb.pos(-width / 2f, 0, length / 2f).tex(uMin, vMax).endVertex(); tessellator.draw(); } GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.disableBlend(); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } }