aa4863a979
Highlighted interfaces is turned off after switching dimensions
98 lines
4.1 KiB
Java
98 lines
4.1 KiB
Java
package appeng.helpers;
|
|
|
|
import appeng.client.render.BlockPosHighlighter;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.entity.EntityPlayerSP;
|
|
import net.minecraft.client.renderer.BufferBuilder;
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
// taken from McJty's McJtyLib
|
|
|
|
public class HighlighterHandler
|
|
{
|
|
|
|
public static void tick( RenderWorldLastEvent event ) {
|
|
renderHilightedBlock(event);
|
|
}
|
|
|
|
private static void renderHilightedBlock( RenderWorldLastEvent event ) {
|
|
BlockPos c = BlockPosHighlighter.getHilightedBlock();
|
|
if (c == null) {
|
|
return;
|
|
}
|
|
Minecraft mc = Minecraft.getMinecraft();
|
|
int dimension = mc.world.provider.getDimension();
|
|
long time = System.currentTimeMillis();
|
|
|
|
if (time > BlockPosHighlighter.getExpireHilight() || dimension != BlockPosHighlighter.getDimension()) {
|
|
BlockPosHighlighter.hilightBlock(null, -1, BlockPosHighlighter.getDimension() );
|
|
return;
|
|
}
|
|
|
|
if (((time / 500) & 1) == 0) {
|
|
return;
|
|
}
|
|
|
|
EntityPlayerSP p = mc.player;
|
|
double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.getPartialTicks();
|
|
double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.getPartialTicks();
|
|
double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.getPartialTicks();
|
|
|
|
GlStateManager.pushMatrix();
|
|
GlStateManager.color(1.0f, 0, 0);
|
|
GlStateManager.glLineWidth(3);
|
|
GlStateManager.translate(-doubleX, -doubleY, -doubleZ);
|
|
|
|
GlStateManager.disableDepth();
|
|
GlStateManager.disableTexture2D();
|
|
|
|
Tessellator tessellator = Tessellator.getInstance();
|
|
BufferBuilder buffer = tessellator.getBuffer();
|
|
float mx = c.getX();
|
|
float my = c.getY();
|
|
float mz = c.getZ();
|
|
buffer.begin( GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
|
|
renderHighLightedBlocksOutline(buffer, mx, my, mz, 1.0f, 0.0f, 0.0f, 1.0f);
|
|
|
|
tessellator.draw();
|
|
|
|
GlStateManager.enableTexture2D();
|
|
GlStateManager.popMatrix();
|
|
}
|
|
|
|
public static void renderHighLightedBlocksOutline(BufferBuilder buffer, float mx, float my, float mz, float r, float g, float b, float a) {
|
|
buffer.pos(mx, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex();
|
|
|
|
buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my + 1, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex();
|
|
|
|
buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my, mz).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my + 1, mz).color(r, g, b, a).endVertex();
|
|
|
|
buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx + 1, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my, mz + 1).color(r, g, b, a).endVertex();
|
|
buffer.pos(mx, my + 1, mz + 1).color(r, g, b, a).endVertex();
|
|
}
|
|
}
|