From 7e4a19159339b2c68a3ac4e45cfaac438f39b276 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sat, 16 Aug 2014 12:58:16 +0200 Subject: [PATCH] Added SignChangeEvent --- src/pocketmine/Player.php | 27 +++++-- src/pocketmine/event/block/BlockEvent.php | 8 ++ .../event/block/SignChangeEvent.php | 81 +++++++++++++++++++ 3 files changed, 108 insertions(+), 8 deletions(-) create mode 100644 src/pocketmine/event/block/SignChangeEvent.php diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index e98e5e9ce..b6005a3db 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -27,6 +27,7 @@ use pocketmine\entity\DroppedItem; use pocketmine\entity\Entity; use pocketmine\entity\Human; use pocketmine\entity\Living; +use pocketmine\event\block\SignChangeEvent; use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\inventory\InventoryCloseEvent; @@ -2016,18 +2017,28 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ } $this->craftingType = 0; - $t = $this->getLevel()->getTile(new Vector3($packet->x, $packet->y, $packet->z)); + $t = $this->getLevel()->getTile($v = new Vector3($packet->x, $packet->y, $packet->z)); if($t instanceof Sign){ - if(!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->username){ + $nbt = new NBT(NBT::LITTLE_ENDIAN); + $nbt->read($packet->namedtag); + $nbt = $nbt->getData(); + if($nbt["id"] !== Tile::SIGN){ $t->spawnTo($this); }else{ - $nbt = new NBT(NBT::LITTLE_ENDIAN); - $nbt->read($packet->namedtag); - $nbt = $nbt->getData(); - if($nbt["id"] !== Tile::SIGN){ - $t->spawnTo($this); + $ev = new SignChangeEvent($this->getLevel()->getBlock($v), $this, [ + $nbt["Text1"], $nbt["Text2"], $nbt["Text3"], $nbt["Text4"] + ]); + + if(!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->username){ + $ev->setCancelled(true); + } + + $this->server->getPluginManager()->callEvent($ev); + + if(!$ev->isCancelled()){ + $t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3)); }else{ - $t->setText($nbt["Text1"], $nbt["Text2"], $nbt["Text3"], $nbt["Text4"]); + $t->spawnTo($this); } } } diff --git a/src/pocketmine/event/block/BlockEvent.php b/src/pocketmine/event/block/BlockEvent.php index e5bb1eb61..e40e05f33 100644 --- a/src/pocketmine/event/block/BlockEvent.php +++ b/src/pocketmine/event/block/BlockEvent.php @@ -24,12 +24,20 @@ */ namespace pocketmine\event\block; +use pocketmine\block\Block; use pocketmine\event\Event; abstract class BlockEvent extends Event{ /** @var \pocketmine\block\Block */ protected $block; + /** + * @param Block $block + */ + protected function __construct(Block $block){ + $this->block = $block; + } + public function getBlock(){ return $this->block; } diff --git a/src/pocketmine/event/block/SignChangeEvent.php b/src/pocketmine/event/block/SignChangeEvent.php new file mode 100644 index 000000000..a434965e6 --- /dev/null +++ b/src/pocketmine/event/block/SignChangeEvent.php @@ -0,0 +1,81 @@ +player = $thePlayer; + $this->lines = $theLines; + } + + /** + * @return Player + */ + public function getPlayer(){ + return $this->player; + } + + /** + * @return string[] + */ + public function getLines(){ + return $this->lines; + } + + /** + * @param int $index 0-3 + * + * @return string + */ + public function getLine($index){ + return $this->lines[$index]; + } + + /** + * @param int $index 0-3 + * @param string $line + */ + public function setLine($index, $line){ + $this->lines[$index] = $line; + } +} \ No newline at end of file