lines = array_fill(0, self::LINE_COUNT, ""); if($lines !== null){ if(count($lines) > self::LINE_COUNT){ throw new \InvalidArgumentException("Expected at most 4 lines, got " . count($lines)); } foreach($lines as $k => $line){ $this->checkLineIndex($k); Utils::checkUTF8($line); if(str_contains($line, "\n")){ throw new \InvalidArgumentException("Line must not contain newlines"); } //TODO: add length checks $this->lines[$k] = $line; } } $this->baseColor = $baseColor ?? new Color(0, 0, 0); $this->glowing = $glowing; } /** * Parses sign lines from the given string blob. * TODO: add a strict mode for this * * @throws \InvalidArgumentException if the text is not valid UTF-8 */ public static function fromBlob(string $blob, ?Color $baseColor = null, bool $glowing = false) : SignText{ return new self(array_slice(array_pad(explode("\n", $blob, limit: self::LINE_COUNT + 1), self::LINE_COUNT, ""), 0, self::LINE_COUNT), $baseColor, $glowing); } /** * Returns an array of lines currently on the sign. * * @return string[] * @phpstan-return array{0: string, 1: string, 2: string, 3: string} */ public function getLines() : array{ return $this->lines; } private function checkLineIndex(int|string $index) : void{ if(!is_int($index)){ throw new \InvalidArgumentException("Index must be an integer"); } if($index < 0 || $index >= self::LINE_COUNT){ throw new \InvalidArgumentException("Line index is out of bounds"); } } /** * Returns the sign line at the given offset. * * @throws \InvalidArgumentException */ public function getLine(int $index) : string{ $this->checkLineIndex($index); return $this->lines[$index]; } /** * Returns the base text color of sign. Color codes using the ยง escape character will override this color when used. */ public function getBaseColor() : Color{ return $this->baseColor; } /** * Returns whether the sign text is glowing. When true, the text will have an outline (usually a darker tone of the * base color, or white for black text), and will glow in the dark, making it readable without any light sources. */ public function isGlowing() : bool{ return $this->glowing; } }