This code does not work. No errors while interacting too... PHP: public function onTouch(PlayerInteractEvent $event){ $sign = $event->getBlock(); $player = $event->getPlayer(); $playern = $event->getPlayer()->getName(); if($sign instanceof Sign){ $signtile = $event->getPlayer()->getLevel()->getTile($event->getBlock()); $text = $signtile->getText(); if($text[0] === '[Parkour]'){ if($signtile->getLevel()->getName() == "parkour") { $this->getServer()->broadcastMessage(TextFormat::RED . $playern . " won the parkour!!! He earned 1000$..."); $this->api->addMoney($player, 1000); } } }} onEnable is here: PHP: public function onEnable(){ $this->getServer()->getPluginManager()->registerEvents($this, $this); $this->getLogger()->info("XXXXXXXXXX"); $this->api = EconomyAPI::getInstance(); if (!$this->api) { $this->getLogger()->info(TextFormat::RED."Unable to find EconomyAPI."); return true; }}
PHP: public function onTouch(PlayerInteractEvent $event){ $signtile = $event->getPlayer()->getLevel()->getTile($event->getBlock()); $player = $event->getPlayer(); $playern = $event->getPlayer()->getName(); if($signtile instanceof Sign){ $text = $signtile->getText(); if($text[0] === '[Parkour]'){ if($signtile->getLevel()->getName() == "parkour") { $this->getServer()->broadcastMessage(TextFormat::RED . $playern . " won the parkour!!! He earned 1000$..."); $this->api->addMoney($player, 1000); } } }} ???
Try this PHP: public function onInteract(PlayerInteractEvent $event) { if($event->getBlock()->getId() == 323 || $event->getBlock()->getId() == 63 || $event->getBlock()->getId() == 68) { $sign = $event->getPlayer()->getLevel()->getTile($event->getBlock()); if($sign instanceof Sign) { $signtext = $sign->getText(); if($signtext[0] === "[Parkour]") { if($sign->getLevel()->getName() === "parkour") { $this->getServer()->broadcastMessage(TextFormat::RED . $event->getPlayer()->getName() . " won the parkour!!! They earned $1000..."); $this->api->addMoney($player, 1000); } } } }} and make sure the world's name is parkour with no capital letters.
Why do you check whether it's a sign twice? Also, a placed sign cannot be an Item. And yes, it's $signtext[0]
If it makes u happy PHP: public function onInteract(PlayerInteractEvent $event) { if($event->getBlock()->getId() == 63 || $event->getBlock()->getId() == 68) { $sign = $event->getPlayer()->getLevel()->getTile($event->getBlock()); $signtext = $sign->getText(); if($signtext[0] === "[Parkour]") { if($sign->getLevel()->getName() === "parkour") { $this->getServer()->broadcastMessage(TextFormat::RED . $event->getPlayer()->getName() . " won the parkour!!! They earned $1000..."); $this->api->addMoney($player, 1000); } } }}
You have to ensure $sign is an instance of \pocketmine\tile\Sign. The first check optimizes performance by only trying to retrieve the tile object if the block is a sign block. The second check makes sure that the tile for that sign has been initialized.
The check with ID's just eliminates things that aren't tiles and in theory speeds up the process of checking the Sign, I'm guessing.
Checking the ID only leaves signs and signs are tiles so when instanceof Sign is called there's only one type of tile.
First check: whether that block is a sign block Second check: whether that block is associated with a sign tile.