[РЕШЕНО] Странный рендер (или я) (точно я)

Версия Minecraft
1.16.5
API
Forge
1,357
109
233
У меня есть структура, которую я проверяю на "правильность" построения. Если она построена неправильно, я рендерю в неверных местах ошибку (красный бетон).
Однако почему-то неверные места определяются весьма странно(?): одни из них определяются верно, другие нет.

Собственно сам алгоритм (внутри TileEntityRenderer):
public void renderInvalid(MatrixStack ms, ReassessmentTableTile tile, IRenderTypeBuffer buffer) {
        ms.pushPose();
        BlockPos pos = tile.getBlockPos();
        for(int i = -2; i < 3; i++) {
            for(int j = -2; j < 3; j++) {
                if((i == -2 || i == 2) && j == 0) {
                    if(tile.getLevel().getBlockState(pos.south(i))
                            != BlockRegister.REASSESSMENT_PILLAR.get().defaultBlockState()) {
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidPillar(ms, buffer);
                        ms.popPose();
                    }
                } else if((i == 1 || i == -1) && (j == -2 || j == 2)) {
                    if(tile.getLevel().getBlockState(pos.south(i).east(j))
                            != BlockRegister.REASSESSMENT_PILLAR.get().defaultBlockState()) {
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidPillar(ms, buffer);
                        ms.popPose();
                    }
                } else if(i != 0 && j != 0) {
                    if(tile.getLevel().getBlockState(pos.south(i).east(j)) != Blocks.AIR.defaultBlockState()){
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidBlock(ms, buffer);
                        ms.popPose();
                    }
                }
            }
        }
        ms.popPose();
    }
2022-11-20_22.13.46.png
 
Решение
Я перепутал i и j местами, из-за чего и неверно определялось. Вдобавок, условие i != 0 && j != 0 было изменено на !(i == 0 && j == 0), поскольку выполняло не ту функцию.
Исправленный вариант:
public void renderInvalid(MatrixStack ms, ReassessmentTableTile tile, IRenderTypeBuffer buffer) {
        ms.pushPose();
        BlockPos pos = tile.getBlockPos();
        for(int i = -2; i < 3; i++) {
            for(int j = -2; j < 3; j++) {
                if((j == -2 || j == 2) && i == 0) {
                    if(tile.getLevel().getBlockState(pos.south(j))
                            != BlockRegister.REASSESSMENT_PILLAR.get().defaultBlockState()) {
                        ms.pushPose();
                        ms.translate(i, 0, j)...
1,357
109
233
Я перепутал i и j местами, из-за чего и неверно определялось. Вдобавок, условие i != 0 && j != 0 было изменено на !(i == 0 && j == 0), поскольку выполняло не ту функцию.
Исправленный вариант:
public void renderInvalid(MatrixStack ms, ReassessmentTableTile tile, IRenderTypeBuffer buffer) {
        ms.pushPose();
        BlockPos pos = tile.getBlockPos();
        for(int i = -2; i < 3; i++) {
            for(int j = -2; j < 3; j++) {
                if((j == -2 || j == 2) && i == 0) {
                    if(tile.getLevel().getBlockState(pos.south(j))
                            != BlockRegister.REASSESSMENT_PILLAR.get().defaultBlockState()) {
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidPillar(ms, buffer);
                        ms.popPose();
                    }
                } else if((j == 1 || j == -1) && (i == -2 || i == 2)) {
                    if(tile.getLevel().getBlockState(pos.south(j).east(i))
                            != BlockRegister.REASSESSMENT_PILLAR.get().defaultBlockState()) {
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidPillar(ms, buffer);
                        ms.popPose();
                    }
                } else if(!(i == 0 && j == 0)){
                    if(tile.getLevel().getBlockState(pos.south(j).east(i)) != Blocks.AIR.defaultBlockState()){
                        ms.pushPose();
                        ms.translate(i, 0, j);
                        renderInvalidBlock(ms, buffer);
                        ms.popPose();
                    }
                }
            }
        }
        ms.popPose();
    }
 
Сверху