Okay... NOW I am confused...
I changed a few things, I'm registering the listener in my client proxy now
public class ClientProxy extends CommonProxy{
EntityTracker entityTracker;
@Override
public void postInit(FMLPostInitializationEvent event) {
super.postInit(event);
entityTracker = new EntityTracker(this);
MinecraftForge.EVENT_BUS.register(entityTracker);
}
}
And I changed my onWorldRender function to not be static (as that messed with my eventlistener before, so I though 1+1=2, and it probably is, I just suck at math and got 3 instead)
I also minimized the use of GL11 and accessed GlStateManager instead.
public class EntityTracker {
ClientProxy proxy;
public static HashMap<String, TrackingData> observedEntityID = new HashMap<String, TrackingData>();
public static ArrayList<TracingData> tracingHistory = new ArrayList<TracingData>();
public EntityTracker(ClientProxy proxy){
this.proxy = proxy;
}
@SubscribeEvent
public void onWorldRender(RenderWorldLastEvent event) {
if(tracingHistory == null || tracingHistory.size() <= 0) {
return;
}
if(Minecraft.getMinecraft().player == null) {
return;
}
Vec3d player_pos = Minecraft.getMinecraft().player.getPositionVector();
GlStateManager.pushMatrix();
GlStateManager.disableTexture2D();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.translate(-player_pos.x, -player_pos.y, -player_pos.z);
final Tessellator tessellator = Tessellator.getInstance();
final BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION_COLOR);
TracingData trace_data;
TrackingData track_data;
for(Iterator<TracingData> it=tracingHistory.iterator(); it.hasNext();) {
trace_data = it.next();
track_data=observedEntityID.get(trace_data.ID);
trace_data.setupDrawingBuffer(bufferBuilder, track_data);
if(System.currentTimeMillis()-trace_data.timeOfCreation>=(track_data.getTime()*1000) && ModuleManager.mode==0) {
//rendered time >= max time
it.remove();
}
}
tessellator.draw();
GlStateManager.glLineWidth(1.0f);
GlStateManager.disableBlend();
GlStateManager.enableTexture2D();
GlStateManager.popMatrix();
}
}
Also TracingData::setupDrawingBuffer() is doing a little bit more stuff now:
public void setupDrawingBuffer(BufferBuilder bufferBuilder ,TrackingData td) {
GlStateManager.glLineWidth(td.getThickness());
//y1->y2 | x1->x2 | z1->z2
bufferBuilder.pos(x1, y1, z1).color(0,0,0,0).endVertex();
bufferBuilder.pos(x1, y2, z1).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos(x2, y2, z1).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos(x2, y2, z2).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
//render bounding box lines
bufferBuilder.pos((x2-0.49), (y2-0.49), (z2-0.49)).color(0,0,0,0).endVertex();
bufferBuilder.pos((x2+0.49), (y2-0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2+0.49), (y2-0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2-0.49), (y2-0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2-0.49), (y2-0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2-0.49), (y2+0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2+0.49), (y2+0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2+0.49), (y2+0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2-0.49), (y2+0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2-0.49), (y2-0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
//fill missing 3 lines
bufferBuilder.pos((x2-0.49), (y2+0.49), (z2+0.49)).color(0,0,0,0).endVertex();
bufferBuilder.pos((x2-0.49), (y2+0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2+0.49), (y2-0.49), (z2-0.49)).color(0,0,0,0).endVertex();
bufferBuilder.pos((x2+0.49), (y2+0.49), (z2-0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
bufferBuilder.pos((x2+0.49), (y2-0.49), (z2+0.49)).color(0,0,0,0).endVertex();
bufferBuilder.pos((x2+0.49), (y2+0.49), (z2+0.49)).color(td.getRed(), td.getGreen(), td.getBlue(), td.getAlpha()).endVertex();
}
So, what's the problem now, you ask?
For some reason it DOES render the complete lower half of TracingData::setupDrawingBuffer, I get a flawless boundingbox, but it does NOT render the first 3 lines (y1->y2 | x1->x2 | z1->z2)