Сломанная позиция блока

Версия Minecraft
1.20.1
API
Forge
38
2
1
Всем добра
При создании меню для блока столкнулся с проблемой, что менюшка получает неправильный выход из метода:
Java:
// In some Block class

public static boolean isHeat(Level pLevel, BlockPos pPos) {
    BlockState blockBelow = pLevel.getBlockState(pPos);
if (blockBelow.is(Blocks.CAMPFIRE) || blockBelow.is(Blocks.SOUL_CAMPFIRE)) {
return blockBelow.getValue(CampfireBlock.LIT);
    }

 return false;
}

// In some BlockEntity class

public boolean isHeat() {
        if (level != null) {
            return CookingPotBlock.isHeat(level, worldPosition);
        }
        return false;
    }

// In some MenuScreen class

private void renderIcons(GuiGraphics pGuiGraphics) {
        if (blockEntity.isHeat()) {
            pGuiGraphics.blit(TEXTURE, this.leftPos + 10, this.topPos + 10, 176, 0, 14,12);
        }
    }
Экран всегда получает False. Покопавшись в блоках и повыводя тестовые значения, я был поражен.
1757250182209.png

Java:
// Тест на примере костра
@Inject(method = "use", at = @At("HEAD"))
    protected void onUse(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit, CallbackInfoReturnable<InteractionResult> cir) {
        System.out.println("pos:");
        System.out.println(pPos.getX());
        System.out.println(pPos.getY());
        System.out.println(pPos.getZ());
    }

// Вывод:

pos:
103
66
-68
Позиция И внутри BlockEntity, И внутри самого блока смещена на 1 по Z. Такой же результат я получаю от других блоков в моде. Что это?? Почему это?? Как это чинить?? Я не понимаю, вообще ничего. Прошу помощи.
 
Решение
Кек, так если я прально понял, ты проверяешь блок на той же позиции, где находится твой блок, а не блок под ним
В isHeat() ты юзаешь worldPosition самого блока.

Измени isHeat чтоб он проверял блок под ним, а не самого себя.
Кек, так если я прально понял, ты проверяешь блок на той же позиции, где находится твой блок, а не блок под ним
В isHeat() ты юзаешь worldPosition самого блока.

Измени isHeat чтоб он проверял блок под ним, а не самого себя.
 
Я пытаюсь из класса блока и блокэнтити вытащить значения BlockPos, в которых он находится. Вот таким кодом:
Java:
@Override
    public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
        if (!pLevel.isClientSide) {
            System.out.println("Server pos");
            System.out.println(pPos.getX());
            System.out.println(pPos.getY());
            System.out.println(pPos.getZ());
            BlockEntity be = pLevel.getBlockEntity(pPos);
            if (be instanceof CookingPotBlockEntity pot) {
                pot.printPos();
                NetworkHooks.openScreen(((ServerPlayer) pPlayer), pot, pPos);
            }
        } else {
            System.out.println("Client pos");
            System.out.println(pPos.getX());
            System.out.println(pPos.getY());
            System.out.println(pPos.getZ());

        }

        return InteractionResult.CONSUME;
    }

И на выходе при нажатии получаю:

Java:
Client pos
103
67
-68
Server pos
103
67
-68
103
67
-68

Хотя блок находится на 103, 67, -67
При этом, да, это не мешает никакому коду выполняться, как если бы это были правильные координаты. Но я просто не понимаю, почему оно так?? В других мирах то же самое
 
Через блокбенч сделал модельку, без сторонних библиотек
В редакторе располагал ровно по центру поля
Ну и проблема распространяется на ванильные блоки тоже, так что не в модели дело
 
Назад
Сверху