getHeight() + $motive->getWidth(); if($currentTotalDimension < $totalDimension){ continue; } if(Painting::canFit($player->getLevel(), $blockReplace, $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(empty($motives)){ //No space available return false; } /** @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 false; } $nbt = Entity::createBaseNBT($blockReplace, null, $direction * 90, 0); $nbt->setByte("Direction", $direction); $nbt->setString("Motive", $motive->getName()); $nbt->setInt("TileX", $blockClicked->getFloorX()); $nbt->setInt("TileY", $blockClicked->getFloorY()); $nbt->setInt("TileZ", $blockClicked->getFloorZ()); /** @var Painting $entity */ $entity = Entity::create(Painting::class, $blockReplace->getLevel(), $nbt); $this->pop(); $entity->spawnToAll(); $player->getLevel()->broadcastLevelEvent($blockReplace->add(0.5, 0.5, 0.5), LevelEventPacket::EVENT_SOUND_ITEMFRAME_PLACE); //item frame and painting have the same sound return true; } }