equivalent-exchange-3/src/main/java/com/pahimar/ee3/handler/DrawBlockHighlightHandler.java

155 lines
6.3 KiB
Java

package com.pahimar.ee3.handler;
import com.pahimar.ee3.item.ITransmutationStone;
import com.pahimar.ee3.util.TransmutationHelper;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
@SideOnly(Side.CLIENT)
public class DrawBlockHighlightHandler {
private static int pulse;
private static boolean doInc;
@SubscribeEvent
public void onDrawBlockHighlightEvent(final DrawBlockHighlightEvent event) {
final Minecraft minecraft = FMLClientHandler.instance().getClient();
if (event.currentItem != null && event.currentItem.getItem() instanceof ITransmutationStone && event.target.typeOfHit == MovingObjectType.BLOCK) {
TransmutationHelper.updateTargetBlock(event.player.worldObj, event.target.blockX, event.target.blockY, event.target.blockZ);
/*if (Minecraft.isGuiEnabled() && minecraft.inGameHasFocus && ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION) {
this.drawInWorldTransmutationOverlay(event);
}*/
}
}
/*public void drawInWorldTransmutationOverlay(final DrawBlockHighlightEvent event) {
final double x = event.target.blockX + 0.5f;
final double y = event.target.blockY + 0.5f;
final double z = event.target.blockZ + 0.5f;
final double iPX = ((Entity)event.player).prevPosX + (((Entity)event.player).posX - ((Entity)event.player).prevPosX) * event.partialTicks;
final double iPY = ((Entity)event.player).prevPosY + (((Entity)event.player).posY - ((Entity)event.player).prevPosY) * event.partialTicks;
final double iPZ = ((Entity)event.player).prevPosZ + (((Entity)event.player).posZ - ((Entity)event.player).prevPosZ) * event.partialTicks;
final int texture = event.context.renderEngine.func_78341_b("/mods/ee3/textures/effects/noise.png");
float xScale = 1.0f;
float yScale = 1.0f;
float zScale = 1.0f;
float xShift = 0.1f;
float yShift = 0.1f;
float zShift = 0.1f;
int itemChargeLevel = 0;
if (event.currentItem.getItem() instanceof IChargeable) {
itemChargeLevel = ((IChargeable)event.currentItem.getItem()).getCharge(event.currentItem);
}
final int chargeLevel = 1 + itemChargeLevel * 2;
final ForgeDirection sideHit = ForgeDirection.getOrientation(event.target.sideHit);
switch (sideHit) {
case UP: {
xScale = chargeLevel + 0.1f;
zScale = chargeLevel + 0.1f;
xShift = 0.0f;
zShift = 0.0f;
break;
}
case DOWN: {
xScale = chargeLevel + 0.1f;
zScale = chargeLevel + 0.1f;
xShift = 0.0f;
yShift = -yShift;
zShift = 0.0f;
break;
}
case NORTH: {
xScale = chargeLevel + 0.1f;
yScale = chargeLevel + 0.1f;
xShift = 0.0f;
yShift = 0.0f;
zShift = -zShift;
break;
}
case SOUTH: {
xScale = chargeLevel + 0.1f;
yScale = chargeLevel + 0.1f;
xShift = 0.0f;
yShift = 0.0f;
break;
}
case EAST: {
yScale = chargeLevel + 0.1f;
zScale = chargeLevel + 0.1f;
yShift = 0.0f;
zShift = 0.0f;
break;
}
case WEST: {
yScale = chargeLevel + 0.1f;
zScale = chargeLevel + 0.1f;
xShift = -xShift;
yShift = 0.0f;
zShift = 0.0f;
break;
}
}
GL11.glDepthMask(false);
GL11.glDisable(2884);
for (int i = 0; i < 6; ++i) {
final ForgeDirection forgeDir = ForgeDirection.getOrientation(i);
final int zCorrection = (i == 2) ? -1 : 1;
GL11.glPushMatrix();
GL11.glTranslated(-iPX + x + xShift, -iPY + y + yShift, -iPZ + z + zShift);
GL11.glScalef(1.0f * xScale, 1.0f * yScale, 1.0f * zScale);
GL11.glRotatef(90.0f, (float)forgeDir.offsetX, (float)forgeDir.offsetY, (float)forgeDir.offsetZ);
GL11.glTranslated(0.0, 0.0, (double)(0.5f * zCorrection));
GL11.glClear(256);
renderPulsingQuad(texture, 0.75f);
GL11.glPopMatrix();
}
GL11.glEnable(2884);
GL11.glDepthMask(true);
}
public static void renderPulsingQuad(final int texture, final float maxTransparency) {
final float pulseTransparency = getPulseValue() * maxTransparency / 3000.0f;
GL11.glBindTexture(3553, texture);
final Tessellator tessellator = Tessellator.instance;
GL11.glEnable(32826);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glColor4f(1.0f, 1.0f, 1.0f, pulseTransparency);
tessellator.startDrawingQuads();
tessellator.setColorRGBA_F(1.0f, 1.0f, 1.0f, pulseTransparency);
tessellator.addVertexWithUV(-0.5, 0.5, 0.0, 0.0, 1.0);
tessellator.addVertexWithUV(0.5, 0.5, 0.0, 1.0, 1.0);
tessellator.addVertexWithUV(0.5, -0.5, 0.0, 1.0, 0.0);
tessellator.addVertexWithUV(-0.5, -0.5, 0.0, 0.0, 0.0);
tessellator.draw();
GL11.glDisable(3042);
GL11.glDisable(32826);
}
private static int getPulseValue() {
if (DrawBlockHighlightHandler.doInc) {
DrawBlockHighlightHandler.pulse += 8;
}
else {
DrawBlockHighlightHandler.pulse -= 8;
}
if (DrawBlockHighlightHandler.pulse == 3000) {
DrawBlockHighlightHandler.doInc = false;
}
if (DrawBlockHighlightHandler.pulse == 0) {
DrawBlockHighlightHandler.doInc = true;
}
return DrawBlockHighlightHandler.pulse;
}*/
static {
DrawBlockHighlightHandler.pulse = 0;
DrawBlockHighlightHandler.doInc = true;
}
}