Java tutorial
/** * Copyright (c) Lambda Innovation, 2013-2016 * This file is part of the AcademyCraft mod. * https://github.com/LambdaInnovation/AcademyCraft * Licensed under GPLv3, see project root for more information. */ package cn.academy.vanilla.teleporter.client; import cn.academy.vanilla.teleporter.entity.EntityMarker; import cn.lambdalib.util.client.shader.ShaderNotex; import cn.lambdalib.util.helper.GameTimer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; /** * @author WeathFolD * */ public class RenderMarker extends Render { static final Tessellator t = Tessellator.instance; final double[][] mulArray = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 0, 1 }, { 0, 0, 1 }, { 0, 1, 0 }, { 1, 1, 0 }, { 1, 1, 1 }, { 0, 1, 1 }, }; final double[] rotArray = { 0, -90, -180, -270, 0, -90, -180, -270 }; public RenderMarker() { } @Override public void doRender(Entity ent, double x, double y, double z, float a, float b) { EntityMarker marker = (EntityMarker) ent; if (!marker.firstUpdated()) return; Entity targ = marker.target; float width, height; if (targ != null) { width = targ.width; height = targ.height; } else { width = marker.width; height = marker.height; } ShaderNotex.instance().useProgram(); GL11.glDisable(GL11.GL_TEXTURE_2D); if (marker.ignoreDepth) GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPushMatrix(); GL11.glTranslated(x - width / 2, y + 0.05 * Math.sin(GameTimer.getAbsTime() / 400.0), z - width / 2); marker.color.bind(); renderMark(width, height); GL11.glPopMatrix(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_DEPTH_TEST); GL20.glUseProgram(0); } protected void renderMark(float width, float height) { for (int i = 0; i < 8; ++i) { GL11.glPushMatrix(); boolean rev = i < 4; double sx = width * mulArray[i][0], sy = height * mulArray[i][1], sz = width * mulArray[i][2]; final double len = 0.2 * width; GL11.glTranslated(sx, sy, sz); GL11.glRotated(rotArray[i], 0, 1, 0); GL11.glLineWidth(3f); t.startDrawing(GL11.GL_LINES); t.setBrightness(15728880); t.addVertex(0, 0, 0); t.addVertex(0, rev ? len : -len, 0); t.addVertex(0, 0, 0); t.addVertex(len, 0, 0); t.addVertex(0, 0, 0); t.addVertex(0, 0, len); t.draw(); GL11.glPopMatrix(); } } @Override protected ResourceLocation getEntityTexture(Entity var1) { return null; } }