package com.prupe.mcpatcher.mob; import com.prupe.mcpatcher.TexturePackAPI; import net.minecraft.src.EntityLivingBase; import net.minecraft.src.ResourceLocation; import net.minecraft.src.Tessellator; public class MobOverlay { private static final ResourceLocation MOOSHROOM_OVERLAY = TexturePackAPI.newMCPatcherResourceLocation("mob/cow/mooshroom_overlay.png"); private static final ResourceLocation SNOWMAN_OVERLAY = TexturePackAPI.newMCPatcherResourceLocation("mob/snowman_overlay.png"); private static final double MOO_X0 = -0.45D; private static final double MOO_X1 = 0.45D; private static final double MOO_Y0 = -0.5D; private static final double MOO_Y1 = 0.5D; private static final double MOO_Z0 = -0.45D; private static final double MOO_Z1 = 0.45D; private static final double SNOW_X0 = -0.5D; private static final double SNOW_X1 = 0.5D; private static final double SNOW_Y0 = -0.5D; private static final double SNOW_Y1 = 0.5D; private static final double SNOW_Z0 = -0.5D; private static final double SNOW_Z1 = 0.5D; private static boolean overlayActive; private static int overlayCounter; private static boolean haveMooshroom; private static boolean haveSnowman; public static ResourceLocation snowmanOverlayTexture; static void reset() { haveMooshroom = TexturePackAPI.hasResource(MOOSHROOM_OVERLAY); haveSnowman = TexturePackAPI.hasResource(SNOWMAN_OVERLAY); } public static ResourceLocation setupMooshroom(EntityLivingBase entity, ResourceLocation defaultTexture) { overlayCounter = 0; if (haveMooshroom) { overlayActive = true; return MobRandomizer.randomTexture(entity, MOOSHROOM_OVERLAY); } else { overlayActive = false; return defaultTexture; } } public static boolean renderMooshroomOverlay() { if (overlayActive && overlayCounter < 3) { float tileX0 = (float)overlayCounter / 3.0F; float tileX1 = (float)(++overlayCounter) / 3.0F; Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV(-0.45D, 0.5D, -0.45D, (double)tileX0, 0.0D); tessellator.addVertexWithUV(-0.45D, -0.5D, -0.45D, (double)tileX0, 1.0D); tessellator.addVertexWithUV(0.45D, -0.5D, 0.45D, (double)tileX1, 1.0D); tessellator.addVertexWithUV(0.45D, 0.5D, 0.45D, (double)tileX1, 0.0D); tessellator.addVertexWithUV(0.45D, 0.5D, 0.45D, (double)tileX0, 0.0D); tessellator.addVertexWithUV(0.45D, -0.5D, 0.45D, (double)tileX0, 1.0D); tessellator.addVertexWithUV(-0.45D, -0.5D, -0.45D, (double)tileX1, 1.0D); tessellator.addVertexWithUV(-0.45D, 0.5D, -0.45D, (double)tileX1, 0.0D); tessellator.addVertexWithUV(-0.45D, 0.5D, 0.45D, (double)tileX0, 0.0D); tessellator.addVertexWithUV(-0.45D, -0.5D, 0.45D, (double)tileX0, 1.0D); tessellator.addVertexWithUV(0.45D, -0.5D, -0.45D, (double)tileX1, 1.0D); tessellator.addVertexWithUV(0.45D, 0.5D, -0.45D, (double)tileX1, 0.0D); tessellator.addVertexWithUV(0.45D, 0.5D, -0.45D, (double)tileX0, 0.0D); tessellator.addVertexWithUV(0.45D, -0.5D, -0.45D, (double)tileX0, 1.0D); tessellator.addVertexWithUV(-0.45D, -0.5D, 0.45D, (double)tileX1, 1.0D); tessellator.addVertexWithUV(-0.45D, 0.5D, 0.45D, (double)tileX1, 0.0D); tessellator.draw(); } return overlayActive; } public static void finishMooshroom() { overlayCounter = 0; overlayActive = false; } public static boolean setupSnowman(EntityLivingBase entity) { if (haveSnowman) { snowmanOverlayTexture = MobRandomizer.randomTexture(entity, SNOWMAN_OVERLAY); return true; } else { snowmanOverlayTexture = null; return false; } } public static void renderSnowmanOverlay() { Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); double[] c = new double[4]; getTileCoordinates(0, c); tessellator.addVertexWithUV(0.5D, -0.5D, -0.5D, c[0], c[2]); tessellator.addVertexWithUV(0.5D, -0.5D, 0.5D, c[1], c[2]); tessellator.addVertexWithUV(-0.5D, -0.5D, 0.5D, c[1], c[3]); tessellator.addVertexWithUV(-0.5D, -0.5D, -0.5D, c[0], c[3]); getTileCoordinates(1, c); tessellator.addVertexWithUV(-0.5D, 0.5D, -0.5D, c[0], c[2]); tessellator.addVertexWithUV(-0.5D, 0.5D, 0.5D, c[1], c[2]); tessellator.addVertexWithUV(0.5D, 0.5D, 0.5D, c[1], c[3]); tessellator.addVertexWithUV(0.5D, 0.5D, -0.5D, c[0], c[3]); getTileCoordinates(2, c); tessellator.addVertexWithUV(-0.5D, 0.5D, 0.5D, c[0], c[2]); tessellator.addVertexWithUV(-0.5D, 0.5D, -0.5D, c[1], c[2]); tessellator.addVertexWithUV(-0.5D, -0.5D, -0.5D, c[1], c[3]); tessellator.addVertexWithUV(-0.5D, -0.5D, 0.5D, c[0], c[3]); getTileCoordinates(3, c); tessellator.addVertexWithUV(-0.5D, 0.5D, -0.5D, c[0], c[2]); tessellator.addVertexWithUV(0.5D, 0.5D, -0.5D, c[1], c[2]); tessellator.addVertexWithUV(0.5D, -0.5D, -0.5D, c[1], c[3]); tessellator.addVertexWithUV(-0.5D, -0.5D, -0.5D, c[0], c[3]); getTileCoordinates(4, c); tessellator.addVertexWithUV(0.5D, 0.5D, -0.5D, c[0], c[2]); tessellator.addVertexWithUV(0.5D, 0.5D, 0.5D, c[1], c[2]); tessellator.addVertexWithUV(0.5D, -0.5D, 0.5D, c[1], c[3]); tessellator.addVertexWithUV(0.5D, -0.5D, -0.5D, c[0], c[3]); getTileCoordinates(5, c); tessellator.addVertexWithUV(0.5D, 0.5D, 0.5D, c[0], c[2]); tessellator.addVertexWithUV(-0.5D, 0.5D, 0.5D, c[1], c[2]); tessellator.addVertexWithUV(-0.5D, -0.5D, 0.5D, c[1], c[3]); tessellator.addVertexWithUV(0.5D, -0.5D, 0.5D, c[0], c[3]); tessellator.draw(); } private static void getTileCoordinates(int tileNum, double[] c) { c[0] = (double)(tileNum % 3) / 3.0D; c[1] = c[0] + 0.3333333333333333D; c[2] = (double)(tileNum / 3) / 2.0D; c[3] = c[2] + 0.5D; } }