I have a similar problem. When I draw something in world on RenderWorldLastEvent, everything works fine except when player sneaks.
And here is my code.
@SubscribeEvent
public static void onRenderWorldLast(RenderWorldLastEvent event) {
BlockRenderer.renderBlockOutline(event.getPartialTicks()); // XXX render one block at 1, 1, 1 for testing
}
public static void renderBlockOutline(float partialTicks) {
ClientPlayerEntity playerEntity = Minecraft.getInstance().player;
double x = playerEntity.lastTickPosX + (playerEntity.posX - playerEntity.lastTickPosX) * partialTicks;
double y = playerEntity.lastTickPosY + (playerEntity.posY - playerEntity.lastTickPosY) * partialTicks;
double z = playerEntity.lastTickPosZ + (playerEntity.posZ - playerEntity.lastTickPosZ) * partialTicks;
//LogManager.getLogger().info(playerEntity.getEyePosition(partialTicks));
//Vec3d eyePos = playerEntity.getEyePosition(partialTicks);
//Vec3d eyePos = Minecraft.getInstance().getRenderViewEntity().getEyePosition(partialTicks);
GlStateManager.pushMatrix();
//GlStateManager.translated(-eyePos.x, -eyePos.y, -eyePos.z);
GlStateManager.translated(-x, -y - playerEntity.getEyeHeight(), -z);
GlStateManager.translated(-9, 63, 6);
GlStateManager.disableCull();
GlStateManager.disableDepthTest();
GlStateManager.disableTexture();
GlStateManager.color4f(1, 1, 1, 1);
//GlStateManager.lineWidth(1);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION);
bufferBuilder.pos(0, 0, 0).endVertex();
bufferBuilder.pos(1, 0, 0).endVertex();
bufferBuilder.pos(1, 0, 1).endVertex();
bufferBuilder.pos(0, 0, 1).endVertex();
bufferBuilder.pos(0, 1, 0).endVertex();
bufferBuilder.pos(1, 1, 0).endVertex();
bufferBuilder.pos(1, 1, 1).endVertex();
bufferBuilder.pos(0, 1, 1).endVertex();
tessellator.draw();
GlStateManager.enableDepthTest();
GlStateManager.enableTexture();
GlStateManager.popMatrix();
}