[LiteCore] Не работает проверка на нахождение предмета в инвентаре

Всем привет, если не сложно можете помочь?
В коде есть проверка на нахождение руны в инвентаре, но почему то не работает.

<?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;
}

}

Пон

Пон

@Bestaford чекай, там чел использкющий твой плагин)

кек, я его писал когда-то года 2 назад за небольшие деньги

я по рандому, в первое ссылке нашел, увидел тебя на англоязычном форуме, в шоке был

этот плагин и на форуме был до вайпа

1 лайк

Аа, я не видел, хз

PlayerItemHeldEvent это же вроде когда игрок листает слоты хот бара

PlayerInventoryChangeEvent?

что тебе нужно? Когда игрок взаимодействует с предметом?

Нужно чтобы если руна пропадает из инвентаря то эффект пропадает тоже.

тогда вроде бы да, не помню точно

я сделал, все плохо

Это я уже исправил, не помогло.

:slight_smile:

Лучше использовать таски или другие способы для проверки инвентаря игрока

public function onTap(PlayerInteractEvent $event){ 	if($event->getBlock()->getId() == 0){ 		if($event->getPlayer()->getInventory()->getItemInHand()->getId() == 421){ 			if($event->getPlayer()->getItemInHand()->getName() == "§l§". $this->color ."Руна регенераций §7- §f30§7сек§r"){ 				$event->getPlayer()->addEffect(Effect::getEffect(10)->setAmplifier(1)->setDuration(10 * 180)->setVisible(false)); 				$event->getPlayer()->getInventory()->removeItem(Item::get(421,0)); 				$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,"); 		 } 	 } 	} 	if($event->getBlock()->getId() == 0){ 		if($event->getPlayer()->getInventory()->getItemInHand()->getId() == 421){ 			if($event->getPlayer()->getItemInHand()->getName() == "§l§". $this->color ."Руна силы §7- §f3§7м§r"){ 				$event->getPlayer()->addEffect(Effect::getEffect(5)->setAmplifier(1)->setDuration(10 * 180)->setVisible(false)); 				$event->getPlayer()->getInventory()->removeItem(Item::get(421,0)); 				$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,"); 		 } 	 } 	} 	if($event->getBlock()->getId() == 0){ 		if($event->getPlayer()->getInventory()->getItemInHand()->getId() == 421){ 			if($event->getPlayer()->getItemInHand()->getName() == "§l§". $this->color ."Руна скорости §7- §f5§7м§r"){ 				$event->getPlayer()->addEffect(Effect::getEffect(1)->setAmplifier(1)->setDuration(10 * 480)->setVisible(false)); 				$event->getPlayer()->getInventory()->removeItem(Item::get(421,0)); 				$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,"); 		 } 	 } 	} 	if($event->getBlock()->getId() == 0){ 	 if($event->getPlayer()->getInventory()->getItemInHand()->getId() == 421){ 		if($event->getPlayer()->getItemInHand()->getName() == "§l§". $this->color ."Руна энда §7- x§f2§r"){ 			if($this->getServer()->isLevelGenerated("ender")){ 			 if($event->getPlayer()->getLevel()->getName() == "ender"){ 				$event->getPlayer()->teleport($this->getServer()->getLevelByName("world")->getSafeSpawn()); 				$event->getPlayer()->getInventory()->removeItem(Item::get(421,0)); 				$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,"); 		 }else{ 			 	$event->getPlayer()->teleport($this->getServer()->getLevelByName("ender")->getSafeSpawn()); 			 $event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,");} 			}else{ 	 	$event->getPlayer()->sendMessage(Main::PREFIX ."§fИзвините но мы не смогли найти данное измерение или же этот мир отключён§7: §e/runa§7,");} 	 } 	} } if($event->getBlock()->getId() == 0){ 	if($event->getPlayer()->getInventory()->getItemInHand()->getId() == 421){ 		if($event->getPlayer()->getItemInHand()->getName() == "§l§". $this->color ."Руна незера §7- x§f2§r"){ 			if($this->getServer()->isLevelGenerated("nether")){ 		if($event->getPlayer()->getLevel()->getName() == "nether"){ 			$event->getPlayer()->teleport($this->getServer()->getLevelByName("world")->getSafeSpawn()); 			$event->getPlayer()->getInventory()->removeItem(Item::get(421,0)); 			$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,"); 		}else{ 			$event->getPlayer()->teleport($this->getServer()->getLevelByName("nether")->getSafeSpawn()); 			$event->getPlayer()->sendPopup("§l§fВы успешно использовали руну§7,");} 		}else{ 	 	$event->getPlayer()->sendMessage(Main::PREFIX ."§fИзвините но мы не смогли найти данное измерение или же этот мир отключён§7: §e/runa§7,");} 	 } 	} } }

:skull_and_crossbones::skull_and_crossbones::skull_and_crossbones:

не нужен мне твой плагин, свое хочу.