Два баундбокса

Версия Minecraft
1.12.2
5,018
47
783
Драсте. Есть такая тема - необходимо сделать провода, чтобы они вписывались во внутренний угол. Но в тоже время нужно чтобы сломать их можно было и там, и там. Делать непонятный куб как у забора - очень некрасиво.

Можно ли сделать как то два параллелепипеда, а потом "суммировать" их как один?

1562866787248.png
 
3,005
192
592
Посмотри как сделаны редстоун провода в project red. (вроде в нем)
 

timaxa007

Модератор
5,831
409
672
Я не особо понял, но то что понял. Проверяй на какую сторону блока ты взаимодействуешь (или по сложнее координаты куда падает взгляд игрока).
 
3,005
192
592
Тебе нужно скорее всего просто свой AABB хранить и в getter'е возвращать его.
 
5,018
47
783
Нет, коллизию я уже сделал. В него упираюсь, на ней можно стоять. Физически норм, а вот визуально пока нет. Я щас пытаюсь сделать чтобы при наведении на блок мой второй баундбокс тоже отрисовывался, и пока не знаю как это сделать. Ну и наоборот, чтобы при наведении на этот отрисовывался изначальный
Java:
    @SubscribeEvent
    public void drawSelectionBox(DrawBlockHighlightEvent e)
    {
      
        if(e.getTarget().typeOfHit == RayTraceResult.Type.BLOCK)
        {
            BlockPos blockpos = e.getTarget().getBlockPos();
            World world = e.getPlayer().getEntityWorld();
          
//            WiresBlock wb = (WiresBlock)world.getBlockState(blockpos).getBlock();
//            if(world.getBlockState(blockpos).getBlock() == wb)
            e.getContext().drawSelectionBox(e.getPlayer(), e.getTarget(), 0, e.getPartialTicks());
        }
    //    e.setCanceled(true);
    }
}
 
5,018
47
783
хыхы че то такое получилось с помощью
e.getContext().drawBoundingBox(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F, 0, 0, 0, 1);
но оно почему то ездит вместе со мной, а не стоит около блока.
1562871505633.png
 
5,018
47
783
а как вертексы из блокпоза достать?:oops:
я не нашел аналогов, а этот рисует для игрока, а не для блока, в принципе логично

тут явно надо через drawSelectionBox только я не понимаю почему он не работает
 
5,018
47
783
Короче стыбзил код рендера из RenderGlobal, все рендерится,но криво. Одна вершина куба как и положено, находится в нижнем углу. Но вторая почему то ездит вслед за позицией игрока. Я уже весь измучался, все потыркал, но так и не понял как сделать чтобы вторая вершина имела фиксированные координаты.
Java:
public class DrawCollisionBox {



    @SubscribeEvent
    public void drawSelectionBox(DrawBlockHighlightEvent e)
    {

        if(e.getTarget().typeOfHit == RayTraceResult.Type.BLOCK)
        {
            int execute = 0;


            if (execute == 0 && e.getTarget().typeOfHit == RayTraceResult.Type.BLOCK)
            {
                GlStateManager.enableBlend();
                GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
                GlStateManager.glLineWidth(2.0F);
                GlStateManager.disableTexture2D();
                GlStateManager.depthMask(false);
                BlockPos blockpos = e.getTarget().getBlockPos();
                IBlockState iblockstate = e.getPlayer().getEntityWorld().getBlockState(blockpos);
                if(iblockstate.getBlock() == RegBlocks.wires) {
                    if (iblockstate.getMaterial() != Material.AIR && e.getPlayer().getEntityWorld().getWorldBorder().contains(blockpos))
                    {
                        double d3 = e.getPlayer().lastTickPosX + (e.getPlayer().posX - e.getPlayer().lastTickPosX) * (double)e.getPartialTicks();
                        double d4 = e.getPlayer().lastTickPosY + (e.getPlayer().posY - e.getPlayer().lastTickPosY) * (double)e.getPartialTicks();
                        double d5 = e.getPlayer().lastTickPosZ + (e.getPlayer().posZ - e.getPlayer().lastTickPosZ) * (double)e.getPartialTicks();
                        
                        
                        RenderGlobal.drawSelectionBoundingBox(iblockstate.getSelectedBoundingBox(e.getPlayer().getEntityWorld(), blockpos).grow(0.0020000000949949026D).offset(-d3, -d4, -d5), 0F, 0.0F, 0.0F, 0.4F);
                    
                        AxisAlignedBB box = new AxisAlignedBB(0, 0, 0,   d3, d4 , d5 );
                        RenderGlobal.drawSelectionBoundingBox(iblockstate.getSelectedBoundingBox(e.getPlayer().getEntityWorld(), blockpos).intersect(box).offset(-d3, -d4, -d5), 0F, 0, 0, 1);                    }
                } else
                    if (iblockstate.getMaterial() != Material.AIR && e.getPlayer().getEntityWorld().getWorldBorder().contains(blockpos))
                    {
                        double d3 = e.getPlayer().lastTickPosX + (e.getPlayer().posX - e.getPlayer().lastTickPosX) * (double)e.getPartialTicks();
                        double d4 = e.getPlayer().lastTickPosY + (e.getPlayer().posY - e.getPlayer().lastTickPosY) * (double)e.getPartialTicks();
                        double d5 = e.getPlayer().lastTickPosZ + (e.getPlayer().posZ - e.getPlayer().lastTickPosZ) * (double)e.getPartialTicks();

                        RenderGlobal.drawSelectionBoundingBox(iblockstate.getSelectedBoundingBox(e.getPlayer().getEntityWorld(), blockpos).grow(0.0020000000949949026D).offset(-d3, -d4, -d5), 0F, 0.0F, 0.0F, 0.4F);
                    }
                GlStateManager.depthMask(true);
                GlStateManager.enableTexture2D();
                GlStateManager.disableBlend();
            }

        }
        e.setCanceled(true);

    }
}

bandicam 2019-07-11 23-49-13-954.jpg
 
7,099
324
1,509
@Maxik001 ты хочешь два+ баунд-бокса у одного блока? Или хочешь, чтобы баунд-бокс блок менялся при смене точки, куда игрок смотрит?
Оба можно посмотреть в automagy, там кристаллы редстоуна по дефолту имеют один бокс, когда на них смотришь в жезлом в руке - 5 боксов
 
5,018
47
783
В общем то у меня получилось, я понял как это дело настраивать, за исключением того, что я не пойму откуда беруться эти диагонали и как их скрыть...
1563111608680.png
 
5,018
47
783
Также смущает то, что у этого куба 18 вершин вместо нормальных 8...
Зачем это?
 
5,018
47
783
Все понял, это тесселятор так работает, проводит линию между предыдущей точкой и новой
 
Сверху