equivalent-exchange-3/src/main/java/com/pahimar/ee3/handler/DrawBlockHighlightHandler.java
2023-01-03 17:47:36 +01:00

159 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;
}
}