Вопрос DrawBox

Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
320
Реакции[?]
24
Поинты[?]
12K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!



Получаю координаты сундука(или вагонетки не важно)

в ивенте пытаюсь рисовать бокс на этих координатах и почему-то два рисуется, правильный(-ые) бокс(-ы) рисуются на сундуках вагонетках норм, но вот какого-то фига появляется из ниоткуда лишний куб(-ы):
Версия 1.20.1




Java:
private Set<BlockEntity> renderedChests = new HashSet<>();
    private Set<Entity> renderedEntities = new HashSet<>();
    @SubscribeEvent
    public void DrawBox(RenderLevelStageEvent event) {
        if (!UI.ShouldDraw) {
            return;
        }

        Vec3 renderOffset = mc.gameRenderer.getMainCamera().getPosition();//mc.gameRenderer.getMainCamera().getPosition();
     //   Vec3 vec3 = camera.getPosition().reverse();


        //MultiBufferSource.BufferSource buffer = mc.renderBuffers().bufferSource();

        int renderDistance = 50; // Adjust the render distance as needed

        for (int dx = -renderDistance; dx <= renderDistance; ++dx) {
            for (int dz = -renderDistance; dz <= renderDistance; ++dz) {
                ChunkPos chunkPos = new ChunkPos(mc.player.blockPosition().offset(dx, 0, dz));
                LevelChunk chunk = mc.player.clientLevel.getChunkSource().getChunkNow(chunkPos.x, chunkPos.z);

                if (chunk != null) {
                    Map<BlockPos, BlockEntity> map = chunk.getBlockEntities();
                    for (BlockEntity blockEntity : map.values())
                    {

                        if (blockEntity.getBlockState().getBlock().getDescriptionId().contains("chest"))
                        {
                            BlockPos chestPos = blockEntity.getBlockPos();
                            if (!renderedChests.contains(blockEntity)) {
                                // Draw only if not rendered before
                                drawBoundingBox( new AABB(chestPos), 0x9600FF00, renderOffset);

                                renderedChests.add(blockEntity);
                            }
                        }
                    }

                }
            }
            List<Entity> ents = mc.player.clientLevel.getEntities(mc.player,mc.player.getBoundingBox().inflate(85.0d));
            for(Entity entity : ents)
            {
                if(entity == mc.player)
                {
                    continue;
                }
                //mc.player.sendSystemMessage(Component.literal(entity.getName().getString()));
                if(entity.getType() == EntityType.CHEST_MINECART)
                {
                    BlockPos chestPos = entity.blockPosition();
                    if (!renderedEntities.contains(entity)) {
                        // Draw only if not rendered before
                        drawBoundingBox( new AABB(chestPos), 0x9600CCCC, renderOffset);
                        renderedEntities.add(entity);
                    }
                } 
            }
        }

        // Clear the set for the next frame

        renderedChests.clear();
        renderedEntities.clear();
       // buffer.endBatch();
    }


        private void drawBoundingBox(AABB boundingBox, int color, Vec3 CameraPos) {
            float r = ((color >> 16) & 0xFF) / 255.0F;
            float g = ((color >> 8) & 0xFF) / 255.0F;
            float b = (color & 0xFF) / 255.0F;
            float a = ((color >> 24) & 0xFF) / 255.0F;

            Tesselator tessellator = Tesselator.getInstance();
            BufferBuilder bufferBuilder = tessellator.getBuilder();

            RenderSystem.setShader(GameRenderer::getPositionShader);
            RenderSystem.setShaderColor(r, g, b, a);
            // Save Matrix
            RenderSystem.backupProjectionMatrix();
            RenderSystem.applyModelViewMatrix();

            RenderSystem.disableDepthTest();
            RenderSystem.depthMask(false);

            RenderSystem.lineWidth(1.5F);
            RenderSystem.blendFunc(770, 771);
            RenderSystem.enableBlend();

            bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);

            // Adjust the vertices to better fit the chest
            float minX = (float) (boundingBox.minX - CameraPos.x());
            float minY = (float) (boundingBox.minY - CameraPos.y());
            float minZ = (float) (boundingBox.minZ - CameraPos.z());
            float maxX = (float) (boundingBox.maxX - CameraPos.x());
            float maxY = (float) (boundingBox.maxY - CameraPos.y());
            float maxZ = (float) (boundingBox.maxZ - CameraPos.z());

            // Front face
            bufferBuilder.vertex(minX, minY, minZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, minY, minZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, maxY, minZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(minX, maxY, minZ).color(r, g, b, a).endVertex();

            // Back face
            bufferBuilder.vertex(minX, minY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, minY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, maxY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(minX, maxY, maxZ).color(r, g, b, a).endVertex();

            // Connect the faces
            bufferBuilder.vertex(minX, minY, minZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(minX, minY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, minY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, minY, minZ).color(r, g, b, a).endVertex();

            bufferBuilder.vertex(minX, maxY, minZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(minX, maxY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, maxY, maxZ).color(r, g, b, a).endVertex();
            bufferBuilder.vertex(maxX, maxY, minZ).color(r, g, b, a).endVertex();

            tessellator.end();

            // Restore the previous matrix
            RenderSystem.depthMask(true);
            RenderSystem.enableDepthTest();
            RenderSystem.restoreProjectionMatrix();
            RenderSystem.disableBlend();
            RenderSystem.defaultBlendFunc();

            RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
        }
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
320
Реакции[?]
24
Поинты[?]
12K
Я подозреваю что вся проблема в функе drawBoundingBox, но я даже не знаю, в чём трабла именно:
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
320
Реакции[?]
24
Поинты[?]
12K
Проблема решена рисованием исключительно на этапе AFTER_WEATHER
 
Сверху Снизу