Realism Craft [1.12/1.12.2] [Разработка идет хаотично]

Радиус сначала был 50, потом 60, потом 70. При 70 блоках сфера начала люто лагать(9-10 фпс):confused:
Спасибо @Dahaka за код сферы.

Выглядит это так:

Java:
if(!mc.isGamePaused()) {
        
            
            playerpos = mc.player.getPosition();
            block = mc.world.getBlockState(playerpos).getBlock();
            int x = playerpos.getX();
            int y = playerpos.getY();
            int z = playerpos.getZ();
            BlockPos pos = new BlockPos(x,y,z);
            
             if(playerpos == null || !playerpos.equals(pos.down())) {
                 final int r = 70;
                 final int rr = r * r;
                
                 for (int i = pos.getX() - r, is = i + 2 * r + 1; i < is; i++) {
                     for (int j = pos.getY() - r, js = j + 2 * r + 1; j < js; j++) {
                         for (int k = pos.getZ() - r, ks = k + 2 * r + 1; k < ks; k++) {
                            
                             final int xx = pos.getX() - i;
                             final int yy = pos.getY() - j;
                             final int zz = pos.getZ() - k;
                             if (xx * xx + yy * yy + zz * zz <= rr) {
                                 if(mc.world.getBlockState(new BlockPos(i,j,k)) == Blocks.COBBLESTONE.getDefaultState()) {
                                 drawBlockTexture(mc.player, mc.getRenderPartialTicks(), i, j, k, mc.world, "realism:textatlas/mold");
                                 }
                             }
                         }
                     }
                 }

Лагает, ясное дело, из за того что проверка в самом конце, после прокрутки трех циклов ((
Можно как то ее вынести за пределы?
 
#Development
Тестировал новое покачивание камеры. Отключается обычной кнопкой в настройках. На данный момент болтает не так сильно, как на видео, и угол крена камеры задается в конфиге.
 
Последнее редактирование:
Ну попробуй в тик по сто раз не выключать гл'овские штуки. Включи, потом везде забинди текстурки, потом выключи... Думаю, это сработает.
 
Ну попробуй в тик по сто раз не выключать гл'овские штуки. Включи, потом везде забинди текстурки, потом выключи... Думаю, это сработает.
Не понял. Сделать срабатывание эвента по тикам?
 
Нет. просто в начале эвента открой все "матрицы", все функции, потом забинди все текстуры, потом все закрой.
 
Слабое место - тесселятор. Затем бинд текстуры и альфаблендинг.
 
#Development
Тестировал новое покачивание камеры. Отключается обычной кнопкой в настройках. На данный момент болтает не так сильно, как на видео, и угол крена камеры задается в конфиге.
О, прямо как в Ку1
 
Нет. просто в начале эвента открой все "матрицы", все функции, потом забинди все текстуры, потом все закрой.
Ниче не поменялось, если что... Также фпс проседает Может неправильно что то сделал?
Java:
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void eventClick(RenderWorldLastEvent event) {
        World world = Minecraft.getMinecraft().world;
        if(!mc.isGamePaused()) {
            GlStateManager.enableBlend();
            GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F);
            GlStateManager.doPolygonOffset(-3.0F, -3.0F);
            GlStateManager.enablePolygonOffset();
            GlStateManager.alphaFunc(516, 0.1F);
            GlStateManager.enableAlpha();
            GlStateManager.pushMatrix();

            playerpos = mc.player.getPosition();
            block = mc.world.getBlockState(playerpos).getBlock();
            int x = playerpos.getX();
            int y = playerpos.getY();
            int z = playerpos.getZ();
            BlockPos pos = new BlockPos(x,y,z);

            if(playerpos == null || !playerpos.equals(pos.down())) {
                final int r = 50;
                final int rr = r * r;

                for (int i = pos.getX() - r, is = i + 2 * r + 1; i < is; i++) {
                    for (int j = pos.getY() - r, js = j + 2 * r + 1; j < js; j++) {
                        for (int k = pos.getZ() - r, ks = k + 2 * r + 1; k < ks; k++) {

                            final int xx = pos.getX() - i;
                            final int yy = pos.getY() - j;
                            final int zz = pos.getZ() - k;
                            if (xx * xx + yy * yy + zz * zz <= rr) {
                                if(mc.world.getBlockState(new BlockPos(i,j,k)) == Blocks.COBBLESTONE.getDefaultState()) {
                                    drawBlockTexture(mc.player, mc.getRenderPartialTicks(), i, j, k, mc.world, "realism:textatlas/mold");
                                }
                            }
                        }
                    }

                }
            }
            else {


                block = mc.world.getBlockState(playerpos).getBlock();
                //    Block block = mc.world.getBlockState(RayTraceResultUtil.getRayTraceToBlock(mc.player, 1, 5, true).getBlockPos()).getBlock();

                drawBlockTexture(mc.player, 0.5f, pos.getX() - 6, pos.getY()-6 , pos.getZ()- 6, mc.world, "realism:textatlas/mold");


            }

            GlStateManager.disableAlpha();
            GlStateManager.doPolygonOffset(0.0F, 0.0F);
            GlStateManager.disablePolygonOffset();
            GlStateManager.enableAlpha();
            GlStateManager.depthMask(true);
            GlStateManager.popMatrix();
        }

    }
    public static void drawBlockTexture(Entity entityIn, float partialTicks, int x,int y,int z, World world, String texture) {
        double d3 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks;
        double d4 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks;
        double d5 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks;
        Tessellator tessellatorIn = Tessellator.getInstance();
        BufferBuilder bufferBuilderIn = tessellatorIn.getBuffer();
        Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);

        bufferBuilderIn.begin(7, DefaultVertexFormats.BLOCK);
        bufferBuilderIn.setTranslation(-d3, -d4, -d5);
        bufferBuilderIn.noColor();
        IBlockState iblockstate = world.getBlockState(new BlockPos(x,y,z));
        TextureMap texturemap = Minecraft.getMinecraft().getTextureMapBlocks();
        BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
        blockrendererdispatcher.renderBlockDamage(iblockstate, new BlockPos(x,y,z), texturemap.getAtlasSprite("realism:textatlas/mold"), world);
        tessellatorIn.draw();
        bufferBuilderIn.setTranslation(0.0D, 0.0D, 0.0D);

    }
 
Я, конечно, не уверен, но поробуй тесселятор.драв() прописать один раз в конце
 
Я имею ввиду вызывать tessellatorIn.draw(); в конце RenderWorldLastEvent
 
Я имею ввиду вызывать tessellatorIn.draw(); в конце RenderWorldLastEvent
так там тесселятор вовсю используется в методе. Если я оттуда все переношу, мне быстрее весь drawTexture перенести в эвент
 
Ну так?-_- перенеси tessellatorIn.draw(); из drawTexture в конец RenderWorldLastEvent.
Все остальное для удобства оставь в drawTexture
 
Значит тебе придется найти другой способ рендера картинки на блок.
 
Друзья! Нужно ваше мнение. Уже довольно давно у меня сидит мысль забить на ваниль и начать пилить все свое.Неработающие хуки на сервер подталкивают в ту же сторону(Многое попробовал сделать, в том числе все то, что Глуми посоветовал в теме хуклибы, ничего не работает). Но тогда моя изначальная идея - "немного" изменить ваниль, отправляется в небытие. Дело в том, что я уже столько всего понаворотил, что в "небольшие изменения" это никак не укладывается... Единственное, что меня останавливает и является самым главным аргументом - я буду рушить совместимость с другими модами.
 
Назад
Сверху