Всем привет, если не сложно можете помочь?
В коде есть проверка на нахождение руны в инвентаре, но почему то не работает.
<?php
namespace Runa;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerItemHeldEvent;
use pocketmine\item\Item;
use pocketmine\nbt\tag\StringTag;
use pocketmine\plugin\PluginBase;
use pocketmine\entity\Effect;
class Base extends PluginBase implements Listener {
const RUNE_SILA_II = "Руна Силы II";
const RUNE_SKOROSTI = "Руна Скорости";
const RUNE_SOPROTIVLENIYA = "Руна Сопротивления";
public function onEnable() {
$this->getServer()->getPluginManager()->registerEvents($this, $this);
}
public function onItemHeld(PlayerItemHeldEvent $event) {
$player = $event->getPlayer();
$item = $event->getItem();
if($item->getId() === Item::DYE && $item->getDamage() === 4 && $item->getNamedTagEntry("rune")) {
$rune = $item->getNamedTagEntry("rune")->getValue();
switch($rune) {
case self::RUNE_SILA_II:
if (!$player->getInventory()->contains($item)) {
$player->removeEffect(\pocketmine\entity\Effect::STRENGTH);
} else {
$player->addEffect(\pocketmine\entity\Effect::getEffect(\pocketmine\entity\Effect::STRENGTH)->setDuration(24828832)->setAmplifier(1));
}
break;
case self::RUNE_SKOROSTI:
if (!$player->getInventory()->contains($item)) {
$player->removeEffect(\pocketmine\entity\Effect::SPEED);
} else {
$player->addEffect(\pocketmine\entity\Effect::getEffect(\pocketmine\entity\Effect::SPEED)->setDuration(24828832)->setAmplifier(2));
}
break;
case self::RUNE_SOPROTIVLENIYA:
if (!$player->getInventory()->contains($item)) {
$player->removeEffect(\pocketmine\entity\Effect::RESISTANCE);
} else {
$player->addEffect(\pocketmine\entity\Effect::getEffect(\pocketmine\entity\Effect::RESISTANCE)->setDuration(24828832)->setAmplifier(2));
}
break;
}
}
}
private function hasRuneInInventory($inventory, $runeName) {
$runes = [
self::RUNE_SILA_II,
self::RUNE_SKOROSTI,
self::RUNE_SOPROTIVLENIYA
];
foreach ($runes as $rune) {
$runeItem = Item::get(Item::DYE, 4, 1);
$runeItem->setCustomName($rune);
$tag = new StringTag("rune", $rune);
$runeItem->setNamedTagEntry($tag);
if ($runeName === $rune && $inventory->contains($runeItem)) {
return true;
}
}
return false;
}
private function removeRuneEffects($player) {
$player->removeEffect(\pocketmine\entity\Effect::STRENGTH);
$player->removeEffect(\pocketmine\entity\Effect::SPEED);
$player->removeEffect(\pocketmine\entity\Effect::RESISTANCE);
}
public static function createRuneSilaII(): Item {
$item = Item::get(Item::DYE, 4, 1);
$item->setCustomName(self::RUNE_SILA_II);
$tag = new StringTag("rune", self::RUNE_SILA_II);
$item->setNamedTagEntry($tag);
return $item;
}
public static function createRuneSkorosti(): Item {
$item = Item::get(Item::DYE, 4, 1);
$item->setCustomName(self::RUNE_SKOROSTI);
$tag = new StringTag("rune", self::RUNE_SKOROSTI);
$item->setNamedTagEntry($tag);
return $item;
}
public static function createRuneSoprotivleniya(): Item {
$item = Item::get(Item::DYE, 4, 1);
$item->setCustomName(self::RUNE_SOPROTIVLENIYA);
$tag = new StringTag("rune", self::RUNE_SOPROTIVLENIYA);
$item->setNamedTagEntry($tag);
return $item;
}
public function onCommand(CommandSender $sender, Command $command, $label, array $args): bool {
switch($command->getName()) {
case "rune":
if(isset($args[0])) {
switch(strtolower($args[0])) {
case "sila":
$sender->getInventory()->addItem(self::createRuneSilaII());
break;
case "skorosti":
$sender->getInventory()->addItem(self::createRuneSkorosti());
break;
case "soprotivleniya":
$sender->getInventory()->addItem(self::createRuneSoprotivleniya());
break;
default:
$sender->sendMessage("Неизвестная руна");
break;
}
} else {
$sender->sendMessage("/rune <название>");
}
break;
}
return true;
}
}