Проблема с донатом PM5 ядро: NetherGamesMC

Всех с прошедшим! У меня тут проблема когда человек пишет в чат, на секунду у него исчезают донаты то есть префикс над головой пропадает,и сообщение отображается как в ванильном формате, например

[Server thread/INFO]: <Comic997%%6> Дарова

А должно быть так:

[Server thread/INFO]: [樑樅樊樄樇] v1rus%%v Win : тест

Проблема в том, что как только игрок пишет что-то,префикс и прочее на миллисекунду пропадает, а потом возвращается, но сообщение остаётся в ‘ванильном виде’
Вот код, Alex.php

<?php

declare(strict_types=1);

namespace MeowChat;

use _64FF00\PurePerms\PurePerms;
use _64FF00\PurePerms\event\PPGroupChangedEvent;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\{PlayerJoinEvent, PlayerChatEvent, PlayerMoveEvent};
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityRegainHealthEvent;
use pocketmine\player\Player;
use pocketmine\utils\{TextFormat as TF, Config};

class Alex extends PluginBase implements Listener {

    const DONATE_SITE = "pay.funworld.ru";
    const OS_NAMES = [
        0 => "Unknown", 
        1 => "Android", 
        2 => "iOS", 
        3 => "macOS", 
        4 => "Fire", 
        5 => "GearVR", 
        6 => "Holo", 
        7 => "Win", 
        8 => "Win", 
        9 => "Dedicated",
        10 => "PS", 
        11 => "Switch", 
        12 => "Xbox", 
        13 => "GP", 
        14 => "Pad"
    ];

    private PurePerms $purePerms;
    private Config $config;

    public function onEnable(): void {
        $this->saveDefaultConfig();
        $this->config = $this->getConfig();

        $this->getServer()->getPluginManager()->registerEvents($this, $this);

        $pp = $this->getServer()->getPluginManager()->getPlugin("PurePerms");
        if($pp === null || !$pp->isEnabled()){
            $this->getLogger()->critical("PurePerms не найден или выключен! MeowChat отключён.");
            $this->getServer()->getPluginManager()->disablePlugin($this);
            return;
        }
        $this->purePerms = $pp;
        
        $this->getScheduler()->scheduleRepeatingTask(new UpdateTask($this), 20);
    }

    public function onJoin(PlayerJoinEvent $e): void {
        $this->updateNameTagAndDisplay($e->getPlayer());
    }

    public function onChat(PlayerChatEvent $e): void {
        $p = $e->getPlayer();
        $group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();

        if($this->config->get("MultiWorldChat", true)){
            $recipients = [];
            foreach($e->getRecipients() as $r){
                if($r instanceof Player && $r->getWorld()->getFolderName() === $p->getWorld()->getFolderName()){
                    $recipients[] = $r;
                }
            }
            $e->setRecipients($recipients);
        }

        $msg = $e->getMessage();
        if(!$p->hasPermission("pchat.colored.chat") && !$p->hasPermission("meow.colors")){
            $msg = TF::clean($msg);
        }

        $format = $this->config->getNested("$group.ChatFormat", "§7[$group] §f{NAME}§8: §f{MSG}");
        $format = str_replace(["{MSG}", "{MESSAGE}"], $msg, $format);
        $formatted = $this->replace($p, $format);
        $e->cancel();
        foreach($e->getRecipients() as $recipient){
            $recipient->sendMessage($formatted);
        }
    }

    public function onMove(PlayerMoveEvent $e): void {
        if($e->getFrom()->getWorld() !== $e->getTo()->getWorld()){
            $this->updateNameTagAndDisplay($e->getPlayer());
        }
    }

    public function onDamage(EntityDamageEvent $e): void {
        $entity = $e->getEntity();
        if($entity instanceof Player){
            $this->getScheduler()->scheduleDelayedTask(new \pocketmine\scheduler\ClosureTask(function() use ($entity): void {
                if($entity->isConnected()){
                    $this->updateNameTagAndDisplay($entity);
                }
            }), 1);
        }
    }

    public function onRegainHealth(EntityRegainHealthEvent $e): void {
        $entity = $e->getEntity();
        if($entity instanceof Player){
            $this->getScheduler()->scheduleDelayedTask(new \pocketmine\scheduler\ClosureTask(function() use ($entity): void {
                if($entity->isConnected()){
                    $this->updateNameTagAndDisplay($entity);
                }
            }), 1);
        }
    }

    public function onGroupChanged(PPGroupChangedEvent $e): void {
        $p = $e->getPlayer();
        if($p instanceof Player){
            $this->updateNameTagAndDisplay($p);
        }
    }

    public function updateNameTagAndDisplay(Player $p): void {
        $group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();
        
        $opSuffix = $p->hasPermission("pocketmine.group.operator") ? "婗" : "";
        
        $nameTag = $this->replace($p, $this->config->getNested("$group.NameTagFormat", "§7[$group] §f{NAME}"), true, $opSuffix);
        $displayName = $this->replace($p, $this->config->getNested("$group.DisplayFormat", $this->config->getNested("$group.NameTagFormat", "§7[$group] §f{NAME}")), true, $opSuffix);
        
        $p->setNameTag($nameTag);
        $p->setDisplayName($displayName);
    }

    public function getPurePerms(): PurePerms {
        return $this->purePerms;
    }

    private function replace(Player $p, string $text, bool $isNameTag = false, string $opSuffix = ""): string {
        $name = $p->getName();
        $api = $this->getServer()->getPluginManager()->getPlugin("CommandsAPI");
        if($api !== null && $api->isEnabled() && method_exists($api, "getDisguise")){
            $fake = $api->getDisguise($p);
            if($fake !== null) $name = $fake;
        }

        $title = "";
        $titles = $this->getServer()->getPluginManager()->getPlugin("Titles");
        if($titles !== null && $titles->isEnabled() && method_exists($titles, "getPlayerTitle")){
            $title = $titles->getPlayerTitle($p) ?? "";
        }

        $faction = $isNameTag ? "§fБез клана" : "";
        $clans = $this->getServer()->getPluginManager()->getPlugin("Clans");
        if($clans !== null && $clans->isEnabled() && method_exists($clans, "getPlayerClan")){
            $clan = $clans->getPlayerClan($p->getName());
            if($clan !== null){
                $clanName = is_array($clan) ? ($clan["name"] ?? "") : $clan;
                if($clanName !== ""){
                    $faction = "§6$clanName";
                }
            }
        }

        $platform = "Unknown";
        $ltd = $this->getServer()->getPluginManager()->getPlugin("LimitedWin10");
        if($ltd !== null && $ltd->isEnabled() && method_exists($ltd, "getPlatformAsString")){
            $platform = $ltd->getPlatformAsString($p);
        }

        $group = $this->purePerms->getUserDataMgr()->getGroup($p)->getName();
        $groupWithOp = $group . $opSuffix;

        $replace = [
            "{NAME}"       => $name,
            "{DISPLAY}"    => $p->getDisplayName(),
            "{TITLE}"      => $title,
            "{FAC}"        => $faction,
            "{FACTION}"    => $faction,
            "{PLATFORM}"   => $platform,
            "{HEALTH}"     => "§c" . (int)$p->getHealth() . "§c❤",
            "{MAX_HEALTH}" => (int)$p->getMaxHealth(),
            "{WORLD}"      => $p->getWorld()->getFolderName(),
            "{OS}"         => self::OS_NAMES[$p->getPlayerInfo()->getExtraData()["DeviceOS"] ?? 0] ?? "Unknown",
            "{PING}"       => $p->getNetworkSession()->getPing() . "ms",
            "{TPS}"        => $this->getServer()->getTicksPerSecond()
        ];

        $result = str_replace(array_keys($replace), array_values($replace), $text);
        
        $result = preg_replace('/\[' . preg_quote($group, '/') . '\]/', "[$groupWithOp]", $result);
        
        return $result;
    }
}

Вот UpdateTask.php

<?php

declare(strict_types=1);

namespace MeowChat;

use pocketmine\scheduler\Task;
use pocketmine\player\Player;

class UpdateTask extends Task {

    private Alex $plugin;

    public function __construct(Alex $plugin){
        $this->plugin = $plugin;
    }

    public function onRun(): void {
        foreach($this->plugin->getServer()->getOnlinePlayers() as $player){
            if($player instanceof Player && $player->isConnected()){
                $this->plugin->updateNameTagAndDisplay($player);
            }
        }
    }
}

Или проблема в pureperms?

Может у тебя привилегия которого нет в конфиге плагина

китайская империя цинь уже не та

Это глиф

Не есть в конфиге

  1. Зачем использовать MeowChat, когда RankSystem прекрасно работает на NG?
  2. Зачем прикреплять коды, если ты можешь прикрепить плагин архивом?

Скинь конфиг

Касательно чата, то причина тут. Ты отменяешь ивент сообщения, однако консоли надо, и он БУДЕТ логировать это сообщение. У ивента сообщения есть метод setFormat(), и используй именно ЕГО, а не эту хуuню что я выделил выше. А лучше и вовсе выбросить этот плагин, и посмотреть в сторону более адекватных решений. Если же причина всё таки не тут, то значит среди твоих плагинов крыса

config.yml (11,8 КБ)
На

Попытаюсь с твоим решением сделать и если не получится то наверно на RankSystem перейду

так же в игре не ток в консоли как-бы

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