getHeight() + $motive->getWidth(); if($currentTotalDimension < $totalDimension){ continue; } if(Painting::canFit($player->getWorld(), $blockReplace->getPos(), $face, true, $motive)){ if($currentTotalDimension > $totalDimension){ $totalDimension = $currentTotalDimension; /* * This drops all motive possibilities smaller than this * We use the total of height + width to allow equal chance of horizontal/vertical paintings * when there is an L-shape of space available. */ $motives = []; } $motives[] = $motive; } } if(count($motives) === 0){ //No space available return ItemUseResult::NONE(); } /** @var PaintingMotive $motive */ $motive = $motives[array_rand($motives)]; static $directions = [ Facing::SOUTH => 0, Facing::WEST => 1, Facing::NORTH => 2, Facing::EAST => 3 ]; $direction = $directions[$face] ?? -1; if($direction === -1){ return ItemUseResult::NONE(); } $replacePos = $blockReplace->getPos(); $clickedPos = $blockClicked->getPos(); $nbt = EntityFactory::createBaseNBT($replacePos, null, $direction * 90, 0); $nbt->setByte("Direction", $direction); $nbt->setString("Motive", $motive->getName()); $nbt->setInt("TileX", $clickedPos->getFloorX()); $nbt->setInt("TileY", $clickedPos->getFloorY()); $nbt->setInt("TileZ", $clickedPos->getFloorZ()); /** @var Painting $entity */ $entity = EntityFactory::create(Painting::class, $replacePos->getWorld(), $nbt); $this->pop(); $entity->spawnToAll(); $player->getWorld()->addSound($replacePos->add(0.5, 0.5, 0.5), new PaintingPlaceSound()); return ItemUseResult::SUCCESS(); } }