package net.minecraft.src; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.util.MathHelper; public class ModelSprite { private ModelRenderer modelRenderer = null; private int textureOffsetX = 0; private int textureOffsetY = 0; private float posX = 0.0F; private float posY = 0.0F; private float posZ = 0.0F; private int sizeX = 0; private int sizeY = 0; private int sizeZ = 0; private float sizeAdd = 0.0F; private float minU = 0.0F; private float minV = 0.0F; private float maxU = 0.0F; private float maxV = 0.0F; public ModelSprite(ModelRenderer modelRenderer, int textureOffsetX, int textureOffsetY, float posX, float posY, float posZ, int sizeX, int sizeY, int sizeZ, float sizeAdd) { this.modelRenderer = modelRenderer; this.textureOffsetX = textureOffsetX; this.textureOffsetY = textureOffsetY; this.posX = posX; this.posY = posY; this.posZ = posZ; this.sizeX = sizeX; this.sizeY = sizeY; this.sizeZ = sizeZ; this.sizeAdd = sizeAdd; this.minU = (float)textureOffsetX / modelRenderer.textureWidth; this.minV = (float)textureOffsetY / modelRenderer.textureHeight; this.maxU = (float)(textureOffsetX + sizeX) / modelRenderer.textureWidth; this.maxV = (float)(textureOffsetY + sizeY) / modelRenderer.textureHeight; } public void render(Tessellator tessellator, float scale) { GlStateManager.translate(this.posX * scale, this.posY * scale, this.posZ * scale); float rMinU = this.minU; float rMaxU = this.maxU; float rMinV = this.minV; float rMaxV = this.maxV; if (this.modelRenderer.mirror) { rMinU = this.maxU; rMaxU = this.minU; } if (this.modelRenderer.mirrorV) { rMinV = this.maxV; rMaxV = this.minV; } renderItemIn2D(tessellator, rMinU, rMinV, rMaxU, rMaxV, this.sizeX, this.sizeY, scale * (float)this.sizeZ, this.modelRenderer.textureWidth, this.modelRenderer.textureHeight); GlStateManager.translate(-this.posX * scale, -this.posY * scale, -this.posZ * scale); } public static void renderItemIn2D(Tessellator tess, float minU, float minV, float maxU, float maxV, int sizeX, int sizeY, float width, float texWidth, float texHeight) { if (width < 6.25E-4F) { width = 6.25E-4F; } float dU = maxU - minU; float dV = maxV - minV; double dimX = (double)(MathHelper.abs(dU) * (texWidth / 16.0F)); double dimY = (double)(MathHelper.abs(dV) * (texHeight / 16.0F)); WorldRenderer tessellator = tess.getWorldRenderer(); tessellator.startDrawingQuads(); tessellator.func_178980_d(0.0F, 0.0F, -1.0F); tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)minU, (double)minV); tessellator.addVertexWithUV(dimX, 0.0D, 0.0D, (double)maxU, (double)minV); tessellator.addVertexWithUV(dimX, dimY, 0.0D, (double)maxU, (double)maxV); tessellator.addVertexWithUV(0.0D, dimY, 0.0D, (double)minU, (double)maxV); tess.draw(); tessellator.startDrawingQuads(); tessellator.func_178980_d(0.0F, 0.0F, 1.0F); tessellator.addVertexWithUV(0.0D, dimY, (double)width, (double)minU, (double)maxV); tessellator.addVertexWithUV(dimX, dimY, (double)width, (double)maxU, (double)maxV); tessellator.addVertexWithUV(dimX, 0.0D, (double)width, (double)maxU, (double)minV); tessellator.addVertexWithUV(0.0D, 0.0D, (double)width, (double)minU, (double)minV); tess.draw(); float var8 = 0.5F * dU / (float)sizeX; float var9 = 0.5F * dV / (float)sizeY; tessellator.startDrawingQuads(); tessellator.func_178980_d(-1.0F, 0.0F, 0.0F); int var10; float var11; float var12; for (var10 = 0; var10 < sizeX; ++var10) { var11 = (float)var10 / (float)sizeX; var12 = minU + dU * var11 + var8; tessellator.addVertexWithUV((double)var11 * dimX, 0.0D, (double)width, (double)var12, (double)minV); tessellator.addVertexWithUV((double)var11 * dimX, 0.0D, 0.0D, (double)var12, (double)minV); tessellator.addVertexWithUV((double)var11 * dimX, dimY, 0.0D, (double)var12, (double)maxV); tessellator.addVertexWithUV((double)var11 * dimX, dimY, (double)width, (double)var12, (double)maxV); } tess.draw(); tessellator.startDrawingQuads(); tessellator.func_178980_d(1.0F, 0.0F, 0.0F); float var13; for (var10 = 0; var10 < sizeX; ++var10) { var11 = (float)var10 / (float)sizeX; var12 = minU + dU * var11 + var8; var13 = var11 + 1.0F / (float)sizeX; tessellator.addVertexWithUV((double)var13 * dimX, dimY, (double)width, (double)var12, (double)maxV); tessellator.addVertexWithUV((double)var13 * dimX, dimY, 0.0D, (double)var12, (double)maxV); tessellator.addVertexWithUV((double)var13 * dimX, 0.0D, 0.0D, (double)var12, (double)minV); tessellator.addVertexWithUV((double)var13 * dimX, 0.0D, (double)width, (double)var12, (double)minV); } tess.draw(); tessellator.startDrawingQuads(); tessellator.func_178980_d(0.0F, 1.0F, 0.0F); for (var10 = 0; var10 < sizeY; ++var10) { var11 = (float)var10 / (float)sizeY; var12 = minV + dV * var11 + var9; var13 = var11 + 1.0F / (float)sizeY; tessellator.addVertexWithUV(0.0D, (double)var13 * dimY, 0.0D, (double)minU, (double)var12); tessellator.addVertexWithUV(dimX, (double)var13 * dimY, 0.0D, (double)maxU, (double)var12); tessellator.addVertexWithUV(dimX, (double)var13 * dimY, (double)width, (double)maxU, (double)var12); tessellator.addVertexWithUV(0.0D, (double)var13 * dimY, (double)width, (double)minU, (double)var12); } tess.draw(); tessellator.startDrawingQuads(); tessellator.func_178980_d(0.0F, -1.0F, 0.0F); for (var10 = 0; var10 < sizeY; ++var10) { var11 = (float)var10 / (float)sizeY; var12 = minV + dV * var11 + var9; tessellator.addVertexWithUV(dimX, (double)var11 * dimY, 0.0D, (double)maxU, (double)var12); tessellator.addVertexWithUV(0.0D, (double)var11 * dimY, 0.0D, (double)minU, (double)var12); tessellator.addVertexWithUV(0.0D, (double)var11 * dimY, (double)width, (double)minU, (double)var12); tessellator.addVertexWithUV(dimX, (double)var11 * dimY, (double)width, (double)maxU, (double)var12); } tess.draw(); } }