Коллизия в два блока

Версия Minecraft
1.12.2
344
1
46
Не раз видел блоки высотой коллизии в два бл. Каким образом это можно добавить без лишних костылей? Полазал по форумам, ничего толком не нашёл. На этом особенно.

Screenshot_092719_112533_AM.jpg
 
Решение
Через аддКоллижнБокс добавляешь еще одну физическую границу над твоим блоком, в боксколлизии можно поставить 2f, если нужна более сложная форма, уже через DrawBlockHighlightEvent рисуешь тесселятором. Но придется еще переопределить рейтрейс...

Maxik

Золотой Петушок
4,949
46
720
Через аддКоллижнБокс добавляешь еще одну физическую границу над твоим блоком, в боксколлизии можно поставить 2f, если нужна более сложная форма, уже через DrawBlockHighlightEvent рисуешь тесселятором. Но придется еще переопределить рейтрейс, чтобы он наталкивался на твой новый бокс
 
344
1
46
Java:
    protected static final AxisAlignedBB BLOCK_TOP = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);

 

@Override
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox,
            List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) {
       
   
            addCollisionBoxToList(pos, entityBox, collidingBoxes, BLOCK_TOP);
       
   

}

Коллизия добавилась. Но вот он по прежнему как один блок.

Screenshot_092719_114951_AM.jpgScreenshot_092719_115010_AM.jpg
 

Maxik

Золотой Петушок
4,949
46
720
Ты не понял. Их лучше должно быть два, иначе как ты сделал, будет какаха, это я ошибся. Один отвечает за верхний бокс, второй за нижний. Вот так. К тому же, если ты попробуешь навести на верхний, он у тебя не зарейтресится, потому что этот метод ты не переопределил, а тот рейтрейс, который дефолтный, ничего не знает о том, что ты добавил какой то еще бокс.

Java:
    protected static final AxisAlignedBB BLOCK_TOP = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);



@Override
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox,
            List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) {
    
            addCollisionBoxToList(pos.up(), entityBox, collidingBoxes, BLOCK_TOP);
            addCollisionBoxToList(pos, entityBox, collidingBoxes, BLOCK_TOP);
    


}
 
Сверху