PM5 Fix Player XP Bar: setCurrentXpLevel & setCurrentXpProgress

Answered using AI by Vibe Coding

Code Question:

Напиши простой код для плагина PocketMine-MP PM API 5.37.3 как мне установить фиксированное значение полоски опыта у всех игроков кодом $player->setXpLevel(1); $player->setXpProgress(1.0);, а то у меня неработает это.

Code Solution:

В PocketMine-MP PM5 методы setXpLevel() и setXpProgress() не существуют в классе Player.
Вместо этого используются методы:

  • setXpLevel(int $level) → ❌ не существует
  • setXpProgress(float $progress) → ❌ не существует

Вместо них используются:

  • setCurrentTotalXp(int $xp) — устанавливает всё количество опыта
  • getCurrentTotalXp() — получает текущее количество опыта
  • setCurrentXpLevel(int $level) — устанавливает уровень опыта
  • setCurrentXpProgress(float $progress) — устанавливает прогресс до следующего уровня (от 0.0 до 1.0)

✅ Рабочий пример плагина:

<?php

declare(strict_types=1);

namespace FixedXp;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\player\Player;

class Main extends PluginBase implements Listener {

    protected function onEnable(): void {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
    }

    public function onPlayerJoin(PlayerJoinEvent $event): void {
        $player = $event->getPlayer();
        $player->setCurrentXpLevel(1);      // Уровень 1
        $player->setCurrentXpProgress(1.0); // Полная полоска
    }
}

📁 Структура плагина:

plugins/FixedXp/
├── plugin.yml
└── src/
    └── FixedXp/
        └── Main.php

📄 plugin.yml:

name: FixedXp
main: FixedXp\Main
api: 5.0.0
version: 1.0.0
author: YourName

✅ Результат:

При заходе игрока на сервер его уровень опыта будет 1, а полоска — полностью заполнена.

Если нужно всем активным игрокам установить такие значения по команде или таймеру — напиши, и я дополню.