- 1,015
- 9
- 102
Всем привет. Сделал рендер сундука через ISimpleBlockRenderingHandler. У 30% игроков при рендере этих сундуков майн крашится, и в лог ничего не выводит (краш репорта тож нет). Вот код рендера. Я уже сколько вожусь, не могу понять почему так. Настройки графики у всех одинаковые. Может это из-за видюхи?
Java:
public class RenderChest implements ISimpleBlockRenderingHandler {
public static int listID;
public static Field drawModeField;
static {
try {
drawModeField = ReflectionHelper.findField(Class.forName("net.minecraft.client.renderer.Tessellator"), "drawMode", "field_78409_u");
drawModeField.setAccessible(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static int renderID;
private static ResourceLocation field_147504_g = new ResourceLocation("textures/entity/chest/normal.png");
private ModelChest model = new ModelChest();
public RenderChest(){
listID = glGenLists(1);
glNewList(listID, GL_COMPILE);
glPushMatrix();
glScaled(1, -1, -1);
glTranslatef(0.0625f, -0.5625f, -0.0625f);
((ModelBox)model.chestLid.cubeList.get(0)).render(Tessellator.instance, 0.0625F);
glTranslatef(0.4375f, 0, 0);
((ModelBox)model.chestKnob.cubeList.get(0)).render(Tessellator.instance, 0.0625F);
glTranslatef(-0.4375f, -0.0625f, -0.875f);
((ModelBox)model.chestBelow.cubeList.get(0)).render(Tessellator.instance, 0.0625F);
glPopMatrix();
glEndList();
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
Minecraft.getMinecraft().getTextureManager().bindTexture(field_147504_g);
glPushMatrix();
glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
glScalef(1.0F, -1.0F, -1.0F);
glTranslatef(-0.5F, -0.5F, -0.5F);
model.renderAll();
glPopMatrix();
glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
int meta = world.getBlockMetadata(x, y, z);
int previousGLRenderType = 0;
try {
previousGLRenderType = (int) drawModeField.get(Tessellator.instance);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Tessellator.instance.draw();
glPushMatrix();
Minecraft.getMinecraft().getTextureManager().bindTexture(field_147504_g);
Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
Tessellator.instance.setColorOpaque_F(1, 1,1);
glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
glTranslatef(x > 0 ? x%16 : (x%16 == 0 ? 0 : 16 - Math.abs(x%16)), y%16, z > 0 ? z%16+1 : (z%16 == 0 ? 1 : 17 - Math.abs(z%16)));
model.chestKnob.rotateAngleX = model.chestLid.rotateAngleX;
switch (meta){
case 0:
glTranslatef(1, 0, 0);
break;
case 1:
glTranslatef(0, 0, 0);
break;
case 2:
glTranslatef(0, 0, -1);
break;
case 3:
glTranslatef(1, 0, -1);
break;
}
glRotatef(180 - meta * 90f, 0, 1, 0);
glCallList(listID);
glPopMatrix();
glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
Tessellator.instance.startDrawing(previousGLRenderType);
return true;
}
// Остальное ненужное
}