Помогите с плагином плиз

Код:

<?php

namespace SECRETIX;

use pocketmine\block\Block;
use pocketmine\event\entity\EntityInventoryChangeEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\inventory\InventoryCloseEvent;
use pocketmine\event\inventory\InventoryTransactionEvent;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerQuitEvent;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\DoubleTag;
use pocketmine\nbt\tag\IntTag;
use pocketmine\nbt\tag\ListTag;
use pocketmine\nbt\tag\StringTag;
use pocketmine\inventory\ChestInventory;
use pocketmine\item\Item;
use pocketmine\network\mcpe\protocol\ContainerClosePacket;
use pocketmine\Player;
use pocketmine\plugin\PluginBase;
use pocketmine\tile\Tile;
use pocketmine\math\Vector3;
use pocketmine\level\Position;

class Manager extends PluginBase implements Listener {

    private $time, $chest;

    public function onEnable()
    {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
    }
  //выдача книги игроку сразу прсле захоДа  
    public function onJoin(PlayerJoinEvent $e) {
        $p = $e->getPlayer();
        $p->getInventory()->setItem(1,Item::get(Item::BOOK)->setCustomName("§a§lВыбор фармилки"));
    }
    
// работоспосбность книжки, типо тапнул и открыл тайл
	public function onInteract(PlayerInteractEvent $e){
		$p = $e->getPlayer();
		if($p->getItemInHand()->getId() == 340){
        $tile = Tile::createTile('Chest', $p->getLevel(), $this->getChestNBT($p));
        $block = Block::get(54);
        $block->x = $tile->x;
        $block->y = $tile->y;
        $block->z = $tile->z;
        $this->LevelUp = $this->getServer()->getPluginManager()->getPlugin("LevelUp");
        $lvl = $this->LevelUp->getPlayerLevel(strtolower($p->getName()));
        $block->level = $p->getLevel();
        $block->level->sendBlocks([$p], [$block]);
        if($lvl < 1){
            $p->sendMessage("§l§bMega§fWorld §7»§f Ваш уровень слишком §cмал§f. Пожалуйста достигните как минимум §31 §fуровня!");
            return;
        }

        $inv = $tile->getInventory();
        $name = $p->getName();
        $items = [
            //открытый тайл, сдесь назодят все то что ты видишь при открытиИ контейнера
            10 => Item::get(2, 0, 1)->setCustomName("§b§lФармилка §aЗомби")->setLore(array("§7Нажми что бы попасть на выбранную фармилку\n§r§cДоступно с 1 уровня")),
            13 => Item::get(4, 0, 1)->setCustomName("§b§lФармилка §3Пауков")->setLore(array("§7Нажми что бы попасть на выбранную фармилку\n§r§cДоступно с 5 уровня")),
            16 => Item::get(46, 0, 1)->setCustomName("§b§lФармилка §6Свинозомби")->setLore(array("§7Нажми что бы попасть на выбранную фармилку\n§r§cДоступно с 10 уровня"))
        ];

        foreach($items as $slot => $item) { //Illegal offset type
            $inv->setItem($slot, $item);
        }
        $p->addWindow($inv);
        $this->chest[$p->getName()] = $inv;
      }
    }
//настраиваем работоспособность кажДого слота в контейнере
    public function handleTransaction(InventoryTransactionEvent $e) {
        $transaction = $e->getTransaction();
        $p = $transaction->getPlayer();
        if($p instanceof Player && isset($this->chest[$p->getName()])) {
            $e->setCancelled();
            $info = $this->getInfoOfTransaction($e->getTransaction());
            if($info == null) {
                return false;
            }
            $inv = $info->getInventory();
            $slot = $info->getSlot();
            $item = $inv->getItem($slot);
            $name = $p->getName();
            $this->LevelUp = $this->getServer()->getPluginManager()->getPlugin("LevelUp");
            $lvl = $this->LevelUp->getPlayerLevel(strtolower($p->getName()));
            $x = -31;
            $y = 71;
            $z = 113;
            $x1 = -52;
            $y1 = 71;
            $z1 = 113;
            $x2 = -73;
            $y2 = 71;
            $z2 = 113;
            $world = $this->getServer()->getLevelByName("world");
            $this->getServer()->loadLevel("world");
            switch($item->getCustomName()) {
                case "§b§lФармилка §aЗомби":
                    if(isset($this->time[$name][$item->getName()]) && time() - $this->time[$name][$item->getName()] <= 2) {
                         $p->teleport(new Position($x, $y, $z, $world));
                        $inv->onClose($p);
                        return;
                    }
                    $this->time[$name][$item->getName()] = time();
                    break;
                case "§b§lФармилка §3Пауков":
                    if(isset($this->time[$name][$item->getName()]) && time() - $this->time[$name][$item->getName()] <= 2) {
                        if($lvl < 5){
                            $p->sendMessage("§l§bMega§fWorld §7»§f Ваш уровень слишком §cмал§f! Пожалуйста достигните как минимум §35 §fуровня!");
                        } else {
                            $p->teleport(new Position($x1, $y1, $z1, $world));
                            $p->sendMessage("§l§bMega§fWorld §7»§f Телепорт на §b§lФармилка §3Пауков");
                            $inv->onClose($p);
                        }
                        return;
                    }
                    $this->time[$name][$item->getName()] = time();
                    break;
                case "§b§lФармилка §6Свинозомби":
                    if(isset($this->time[$name][$item->getName()]) && time() - $this->time[$name][$item->getName()] <= 2) {
                        if($lvl < 10){
                            $p->sendMessage("§l§bMega§fWorld §7»§f Ваш уровень слишком §cмал§f! Пожалуйста достигните как минимум §310 §fуровня!");
                        } else {
                            $p->teleport(new Position($x2, $y2, $z2, $world));
                            $p->sendMessage("§l§bMega§fWorld §7»§f Телепорт на §b§lФармилка §3Пауков");
                            $inv->onClose($p);
                        }
                        return;
                    }
                    $this->time[$name][$item->getName()] = time();
                    break;
            }
        }
    }
// название тайла при открытии честа
    public function getChestNBT(Player $p) : CompoundTag {
        return new CompoundTag("", [new StringTag("CustomName", "§a§lВыбор фармилки"), new IntTag("x", (int)floor($p->x)), new IntTag("y", (int)floor($p->y) + 4), new IntTag("z", (int)floor($p->z))]);
    }

    public function getInfoOfTransaction($transaction) {
        $transactions = $transaction->getTransactions();
        foreach($transactions as $t) {
            if(($inv = $t->getInventory()) instanceof ChestInventory) {
                return $t;
            }
        }
        return null;
    }
//чанг ну или как проше говорят антидюп, блокирует все вЗаимодействие с предметами в контейнере
    public function onChange(EntityInventoryChangeEvent $e) {
        $blockedNames = ['§l§rМеню', '§b§lФармилка §aЗомби', '§b§lФармилка §3Пауков', '§b§lФармилка §6Свинозомби'];
        if(in_array($e->getNewItem()->getCustomName(), $blockedNames)) {
            $e->setCancelled();
        }
    }
//закрытие и удаление часта после выхода или закрытии его, сделано для оптимизации
    public function onQuit(PlayerQuitEvent $e) {
        $name = $e->getPlayer()->getName();
        if(isset($this->chest[$name])) {
            unset($this->chest[$name]);
        }
    }

    public function onClose(InventoryCloseEvent $e) {
        $name = $e->getPlayer()->getName();
        if(isset($this->chest[$name])) {
            unset($this->chest[$name]);
        }
    }
}

Знаю это гкод, но почему когда я телепортируюсь у меня пропадает все?




Ядро LiteCore

Я не читал твой код, ибо там… Ну сам знаешь.
Перед телепортацией игрока, ему надо закрывать контейнер

У тебя сначало телепорт, а потом закрытие. Надо на оборот, сначала закрыть, потом телепорт

спасибо

Эта тема была автоматически закрыта через 12 часов после последнего ответа. В ней больше нельзя отвечать.