package net.tropicraft.client.entity.render; import java.nio.FloatBuffer; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.tropicraft.client.entity.model.ModelUmbrella; import net.tropicraft.entity.placeable.EntityUmbrella; import net.tropicraft.util.ColorHelper; import net.tropicraft.util.TropicraftUtils; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; public class RenderUmbrella extends Render { protected ModelBase modelUmbrella; FloatBuffer color; float red = 0.0F, green = 0.0F, blue = 0.0F, alpha = 1.0F; public RenderUmbrella() { shadowSize = 2F; modelUmbrella = new ModelUmbrella(); } public void renderUmbrella(EntityUmbrella entityUmbrella, double d, double d1, double d2, float f, float f1) { GL11.glPushMatrix(); GL11.glTranslatef((float) d, (float) d1, (float) d2); GL11.glRotatef(180F - f, 0.0F, 1.0F, 0.0F); float f2 = (float) entityUmbrella.getTimeSinceHit() - f1; float f3 = (float) entityUmbrella.getDamage() - f1; if (f3 < 0.0F) { f3 = 0.0F; } if (f2 > 0.0F) { GL11.glRotatef(((MathHelper.sin(f2) * f2 * f3) / 10F) * (float) entityUmbrella.getRockDirection(), 1.0F, 0.0F, 0.0F); } float f4 = 0.75F; GL11.glScalef(f4, f4, f4); GL11.glScalef(1.0F / f4, 1.0F / f4, 1.0F / f4); red = ColorHelper.getRed(entityUmbrella.getColor()); green = ColorHelper.getGreen(entityUmbrella.getColor()); blue = ColorHelper.getBlue(entityUmbrella.getColor()); // Draw arms of umbrella Minecraft.getMinecraft().renderEngine.bindTexture(TropicraftUtils.getTextureEntity("umbrellaLayer")); GL11.glScalef(-1F, -1F, 1.0F); modelUmbrella.render(entityUmbrella, 0.0F, 1.0F, 0.1F, 0.0F, 0.0F, 0.25F); // Draw the colored part of the umbrella GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); // Change the color mode to blending GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_BLEND); color = BufferUtils.createFloatBuffer(4).put(new float[]{red, green, blue, alpha}); color.position(0); // Color it GL11.glTexEnv(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_COLOR, color); Minecraft.getMinecraft().renderEngine.bindTexture(TropicraftUtils.getTextureEntity("umbrellaColorLayer")); modelUmbrella.render(entityUmbrella, 0.0F, 1.0F, 0.1F, 0.0F, 0.0F, 0.25F); GL11.glDisable(GL11.GL_BLEND); // Change the color mode back to modulation GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); GL11.glPopMatrix(); GL11.glPopMatrix(); } @Override public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { renderUmbrella((EntityUmbrella) entity, d, d1, d2, f, f1); } @Override /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(Entity entity) { return null; } }