ebcfd3963d
(Actually, it probably doesn't matter because all the references were moved inside the situational checks, but it's better to use the event parameters anyway)
146 lines
4.7 KiB
Java
146 lines
4.7 KiB
Java
package electroblob.wizardry.client.renderer.effect;
|
|
|
|
import electroblob.wizardry.Wizardry;
|
|
import electroblob.wizardry.registry.Spells;
|
|
import electroblob.wizardry.util.EntityUtils;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.BufferBuilder;
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.event.RenderPlayerEvent;
|
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
@Mod.EventBusSubscriber(Side.CLIENT)
|
|
public class RenderShadowWard {
|
|
|
|
private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/entity/shadow_ward.png");
|
|
|
|
// First person
|
|
@SubscribeEvent
|
|
public static void onRenderWorldLastEvent(RenderWorldLastEvent event){
|
|
// Only render in first person
|
|
if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 0){
|
|
|
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
|
|
|
if(EntityUtils.isCasting(player, Spells.shadow_ward)){
|
|
|
|
GlStateManager.pushMatrix();
|
|
|
|
GlStateManager.enableBlend();
|
|
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
|
//GlStateManager.shadeModel(GL11.GL_SMOOTH);
|
|
GlStateManager.disableLighting();
|
|
//GlStateManager.disableAlpha();
|
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
|
|
|
|
GlStateManager.translate(0, 1.2, 0);
|
|
GlStateManager.rotate(-player.rotationYaw, 0, 1, 0);
|
|
GlStateManager.rotate(player.rotationPitch, 1, 0, 0);
|
|
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE);
|
|
|
|
GlStateManager.pushMatrix();
|
|
|
|
GlStateManager.translate(0, 0, 1.2);
|
|
GlStateManager.rotate(player.ticksExisted * -2, 0, 0, 1);
|
|
GlStateManager.scale(1.1, 1.1, 1.1);
|
|
|
|
Tessellator tessellator = Tessellator.getInstance();
|
|
BufferBuilder buffer = tessellator.getBuffer();
|
|
|
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
|
|
|
buffer.pos(-0.5, 0.5, -0.5).tex(0, 0).endVertex();
|
|
buffer.pos(0.5, 0.5, -0.5).tex(1, 0).endVertex();
|
|
buffer.pos(0.5, -0.5, -0.5).tex(1, 1).endVertex();
|
|
buffer.pos(-0.5, -0.5, -0.5).tex(0, 1).endVertex();
|
|
|
|
tessellator.draw();
|
|
|
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
|
|
|
buffer.pos(-0.5, 0.5, -0.5).tex(0, 0).endVertex();
|
|
buffer.pos(-0.5, -0.5, -0.5).tex(0, 1).endVertex();
|
|
buffer.pos(0.5, -0.5, -0.5).tex(1, 1).endVertex();
|
|
buffer.pos(0.5, 0.5, -0.5).tex(1, 0).endVertex();
|
|
|
|
tessellator.draw();
|
|
|
|
GlStateManager.popMatrix();
|
|
|
|
//GlStateManager.shadeModel(GL11.GL_FLAT);
|
|
GlStateManager.enableLighting();
|
|
GlStateManager.disableBlend();
|
|
|
|
GlStateManager.popMatrix();
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// Third person
|
|
@SubscribeEvent
|
|
public static void onRenderPlayerEvent(RenderPlayerEvent.Post event){
|
|
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
|
|
if(EntityUtils.isCasting(player, Spells.shadow_ward)){
|
|
|
|
GlStateManager.pushMatrix();
|
|
|
|
GlStateManager.enableBlend();
|
|
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
|
GlStateManager.disableLighting();
|
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
|
|
|
|
GlStateManager.translate(event.getX(), event.getY(), event.getZ());
|
|
|
|
GlStateManager.rotate(180, 0, 1, 0);
|
|
GlStateManager.rotate(-player.renderYawOffset, 0, 1, 0);
|
|
|
|
Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURE);
|
|
|
|
Tessellator tessellator = Tessellator.getInstance();
|
|
BufferBuilder buffer = tessellator.getBuffer();
|
|
|
|
GlStateManager.translate(0, 1.2, 0);
|
|
GlStateManager.rotate(player.ticksExisted * -2, 0, 0, 1);
|
|
GlStateManager.scale(1.1, 1.1, 1.1);
|
|
|
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
|
|
|
buffer.pos(-0.5, 0.5, -0.5).tex(0, 0).endVertex();
|
|
buffer.pos(0.5, 0.5, -0.5).tex(1, 0).endVertex();
|
|
buffer.pos(0.5, -0.5, -0.5).tex(1, 1).endVertex();
|
|
buffer.pos(-0.5, -0.5, -0.5).tex(0, 1).endVertex();
|
|
|
|
tessellator.draw();
|
|
|
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
|
|
|
buffer.pos(-0.5, 0.5, -0.5).tex(0, 0).endVertex();
|
|
buffer.pos(-0.5, -0.5, -0.5).tex(0, 1).endVertex();
|
|
buffer.pos(0.5, -0.5, -0.5).tex(1, 1).endVertex();
|
|
buffer.pos(0.5, 0.5, -0.5).tex(1, 0).endVertex();
|
|
|
|
tessellator.draw();
|
|
|
|
GlStateManager.enableLighting();
|
|
GlStateManager.disableBlend();
|
|
|
|
GlStateManager.popMatrix();
|
|
|
|
}
|
|
}
|
|
|
|
}
|