mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-14 01:39:52 +00:00
Make SignText immutable
This commit is contained in:
parent
42f543b405
commit
e61a08a56b
@ -62,13 +62,14 @@ class Sign extends Spawnable{
|
|||||||
if($nbt->hasTag(self::TAG_TEXT_BLOB, StringTag::class)){ //MCPE 1.2 save format
|
if($nbt->hasTag(self::TAG_TEXT_BLOB, StringTag::class)){ //MCPE 1.2 save format
|
||||||
$this->text = SignText::fromBlob(mb_scrub($nbt->getString(self::TAG_TEXT_BLOB), 'UTF-8'));
|
$this->text = SignText::fromBlob(mb_scrub($nbt->getString(self::TAG_TEXT_BLOB), 'UTF-8'));
|
||||||
}else{
|
}else{
|
||||||
$this->text = new SignText();
|
$text = [];
|
||||||
for($i = 0; $i < SignText::LINE_COUNT; ++$i){
|
for($i = 0; $i < SignText::LINE_COUNT; ++$i){
|
||||||
$textKey = sprintf(self::TAG_TEXT_LINE, $i + 1);
|
$textKey = sprintf(self::TAG_TEXT_LINE, $i + 1);
|
||||||
if($nbt->hasTag($textKey, StringTag::class)){
|
if($nbt->hasTag($textKey, StringTag::class)){
|
||||||
$this->text->setLine($i, mb_scrub($nbt->getString($textKey), 'UTF-8'));
|
$text[$i] = mb_scrub($nbt->getString($textKey), 'UTF-8');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$this->text = new SignText($text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,13 +39,27 @@ class SignText{
|
|||||||
private $lines;
|
private $lines;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string[] $lines
|
* @param string[]|null $lines index-sensitive; omitting an index will leave it unchanged
|
||||||
* @throws \InvalidArgumentException
|
*
|
||||||
|
* @throws \InvalidArgumentException if the array size is greater than 4
|
||||||
|
* @throws \InvalidArgumentException if invalid keys (out of bounds or string) are found in the array
|
||||||
|
* @throws \InvalidArgumentException if any line is not valid UTF-8 or contains a newline
|
||||||
*/
|
*/
|
||||||
public function __construct(?array $lines = null){
|
public function __construct(?array $lines = null){
|
||||||
$this->lines = array_fill(0, self::LINE_COUNT, "");
|
$this->lines = array_fill(0, self::LINE_COUNT, "");
|
||||||
if($lines !== null){
|
if($lines !== null){
|
||||||
$this->setLines($lines);
|
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(strpos($line, "\n") !== false){
|
||||||
|
throw new \InvalidArgumentException("Line must not contain newlines");
|
||||||
|
}
|
||||||
|
//TODO: add length checks
|
||||||
|
$this->lines[$k] = $line;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,24 +82,6 @@ class SignText{
|
|||||||
return $this->lines;
|
return $this->lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the sign text.
|
|
||||||
*
|
|
||||||
* @param string[] $lines index-sensitive; omitting an index will leave it unchanged
|
|
||||||
*
|
|
||||||
* @throws \InvalidArgumentException if the array size is greater than 4
|
|
||||||
* @throws \InvalidArgumentException if invalid keys (out of bounds or string) are found in the array
|
|
||||||
*/
|
|
||||||
public function setLines(array $lines) : void{
|
|
||||||
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);
|
|
||||||
$this->setLine($k, $line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int|string $index
|
* @param int|string $index
|
||||||
*/
|
*/
|
||||||
@ -107,20 +103,4 @@ class SignText{
|
|||||||
$this->checkLineIndex($index);
|
$this->checkLineIndex($index);
|
||||||
return $this->lines[$index];
|
return $this->lines[$index];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the line at the given offset.
|
|
||||||
*
|
|
||||||
* @throws \InvalidArgumentException if the text is not valid UTF-8
|
|
||||||
* @throws \InvalidArgumentException if the text contains a newline
|
|
||||||
*/
|
|
||||||
public function setLine(int $index, string $line) : void{
|
|
||||||
$this->checkLineIndex($index);
|
|
||||||
Utils::checkUTF8($line);
|
|
||||||
if(strpos($line, "\n") !== false){
|
|
||||||
throw new \InvalidArgumentException("Line must not contain newlines");
|
|
||||||
}
|
|
||||||
//TODO: add length checks
|
|
||||||
$this->lines[$index] = $line;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user