Геометрия для стены | php 8.0

Хочу в событие PlayerInteractEvent с помощью предмета вызвать стену, чтоб от игрока был 1 блок и стена была 3х3. Я в геометрии не очень понимаю, надо же учитывать куда игрок смотрит… Не поможете этот код реализовать. Пытался найти код и подобное, решил попробовать от плагина на крылья, там же это объект создается, но мне это не помогло. Я ничего не понял.

Походу геометрию никто не любит)

Относительно недавно как-раз делал

public static function buildWall(Block $block, Position $position, int $facing, BlockTransaction $tx, int $width, int $height, int $thickness): void {
        $axis = Facing::axis($facing);
        for ($w = 0; $w < $width; $w++) {
            for ($y = $position->getFloorY(); $y <= $position->getFloorY() + $height; $y++) {
                for ($t = 0; $t < $thickness; $t++) {
                    $xOffset = $axis === Axis::X ? $t : $w;
                    $zOffset = $axis === Axis::Z ? $t : $w;

                    $x = $xOffset + ($position->getFloorX() - ceil(($axis === Axis::X ? $thickness : $width) / 2));
                    $z = $zOffset + ($position->getFloorZ() - ceil(($axis === Axis::Z ? $thickness : $width) / 2));

                    $tx->addBlockAt($x, $y, $z, clone $block);
                }
            }
        }
    }

А это что?

Смогули ли я это на ЛайтКор сделать… попробуй.

Получает ось по facing’у. Использование:

        WallBuilder::buildWall(VanillaBlocks::DIRT(), $clickPos, $player->getHorizontalFacing(), $tx, self::WIDTH, self::HEIGHT, self::THICKNESS);

А, для лайткора да, не подойдёт

сможешь

Буду каждую функцию и юз чекать и сравнивать с пм4

ты себе усложняешь задачу и заводишь себя в угол ( в конечном итоге )

Ну да не буду спорить, а у меня особо выбора нету, давно пора уже в этом разобраться.

public static function buildWall(Block $block, Position $position, int $facing, Level $world, int $width, int $height, int $thickness): void {
        $axis = $facing >> 1;
        for ($w = 0; $w < $width; $w++) {
            for ($y = $position->getFloorY(); $y <= $position->getFloorY() + $height; $y++) {
                for ($t = 0; $t < $thickness; $t++) {
                    $xOffset = $axis === 2 ? $t : $w;
                    $zOffset = $axis === 1 ? $t : $w;

                    $x = $xOffset + ($position->getFloorX() - ceil(($axis === 2 ? $thickness : $width) / 2));
                    $z = $zOffset + ($position->getFloorZ() - ceil(($axis === 1 ? $thickness : $width) / 2));

                    $world->setBlockAt($x, $y, $z, clone $block);
                }
            }
        }
    }

Скорее всего как-то так будет. Но это сразу будет применять изменения на мир, либо ты можешь скопипастить BlockTransaction

ну капей


может заменить на это?

да setBlock будет достаточно, просто сделай как-нибудь так для минимального кол-ва аллокаций

public static function buildWall(Block $block, Position $position, int $facing, Level $world, int $width, int $height, int $thickness): void {
        $axis = $facing >> 1;
        $vec = new Vector3();
        for ($w = 0; $w < $width; $w++) {
            for ($y = $position->getFloorY(); $y <= $position->getFloorY() + $height; $y++) {
                for ($t = 0; $t < $thickness; $t++) {
                    $xOffset = $axis === 2 ? $t : $w;
                    $zOffset = $axis === 1 ? $t : $w;

                    $x = $xOffset + ($position->getFloorX() - ceil(($axis === 2 ? $thickness : $width) / 2));
                    $z = $zOffset + ($position->getFloorZ() - ceil(($axis === 1 ? $thickness : $width) / 2));
                    $vec->setComponents($x, $y, $z);
                    $world->setBlock($vec, clone $block);
                }
            }
        }
    }

что за бред ты опять выдумал на этот раз

и кто это делает вообще синхронно

А этот бред снова объясняется тем, что я не сделал систему отношений

ты дурачек? Покажи мне работы свои, нахуй мне системы отношений
Мне нужна конкретная работа

синхронно

Определение знаешь? Или ты думаешь, что AsyncTask из-за того что его дети из баккит карго-культа так назвали имеет что-то общее с асинхронностью?