package com.amadornes.framez.client;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import org.lwjgl.opengl.GL11;
import uk.co.qmunity.lib.client.render.RenderUtils;
import uk.co.qmunity.lib.raytrace.RayTracer;
import uk.co.qmunity.lib.vec.Vec3i;
import com.amadornes.framez.api.IFramezWrench;
import com.amadornes.framez.tile.TileMotor;
import com.amadornes.framez.util.MotorCache;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
public class RenderMovementBlocking {
@SubscribeEvent
public void onRenderTick(RenderWorldLastEvent event) {
World world = Minecraft.getMinecraft().theWorld;
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
MovingObjectPosition mop = world.rayTraceBlocks(RayTracer.instance().getStartVector(player).toVec3(), RayTracer.instance()
.getEndVector(player).toVec3());
ItemStack item = player.getCurrentEquippedItem();
if (item == null)
return;
if (!(item.getItem() instanceof IFramezWrench))
return;
if (Minecraft.getMinecraft().gameSettings.hideGUI && Minecraft.getMinecraft().currentScreen == null)
return;
double thickness = 1 / 32D;
GL11.glPushMatrix();
{
GL11.glDisable(GL11.GL_TEXTURE_2D);
Vec3 playerPos = player.getPosition(event.partialTicks);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4d(1, 1, 1, 1);
List<TileMotor> l = null;
if (mop != null && mop.typeOfHit == MovingObjectType.BLOCK) {
TileEntity te = world.getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (te != null && te instanceof TileMotor) {
l = new ArrayList<TileMotor>();
l.add((TileMotor) te);
}
}
if (l == null)
l = MotorCache.getLoadedMotors();
for (TileMotor m : l) {
if (m.getWorldObj() == world) {
List<Vec3i> blocking = m.getBlocking();
if (blocking == null || blocking.size() == 0)
continue;
for (Vec3i b : blocking) {
double x = b.getX() - playerPos.xCoord;
double y = b.getY() - playerPos.yCoord;
double z = b.getZ() - playerPos.zCoord;
GL11.glPushMatrix();
{
GL11.glTranslated(x - thickness, y - thickness, z - thickness);
GL11.glScaled(1 + (thickness * 2), 1 + (thickness * 2), 1 + (thickness * 2));
GL11.glColor4d(1, 0, 0, .25);
GL11.glBegin(GL11.GL_QUADS);
RenderUtils.drawColoredCube();
GL11.glEnd();
}
GL11.glPopMatrix();
GL11.glPushMatrix();
{
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glColor4d(.75, 0, 0, .5);
GL11.glLineWidth(2);
GL11.glBegin(GL11.GL_LINES);
GL11.glVertex3d(m.xCoord - playerPos.xCoord + 0.5, m.yCoord - playerPos.yCoord + 0.5, m.zCoord
- playerPos.zCoord + 0.5);
GL11.glVertex3d(x + 0.5, y + 0.5, z + 0.5);
GL11.glEnd();
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
GL11.glPopMatrix();
}
}
}
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
GL11.glPopMatrix();
}
}