Files
Applied-Energistics-2/src/main/java/appeng/helpers/HighlighterHandler.java
T
Salomão aa4863a979 Added Fluid support for the Storage Monitor and Conversion Monitor
Highlighted interfaces is turned off after switching dimensions
2021-04-02 08:31:14 -03:00

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();
}
}