Плагин на Глобальный/Локальный чат (PMMP5)

Глобальный/Локальный чат для PMMP5
Описание: Возможность написать в локальный или глобальный чат
Ядро: PocketMine-MP (API: 5.0.0)
Автор: qwaaantex/REPLUGIN (сабку оформите плз)
Примечание: Настройка плагина полностью происходит в main.php, в будущем возможен отдельный конфиг!
Примечание: Во избежания багов, прикрепил зип+девтулс для PMMP5!
Пояснение: Для того чтобы изменить радиус локального чата, измените 100 на нужный радиус!
Пояснение: Для того чтобы изменить префикс глобального или локального чата, измените сообщение в main.php!
Установка: Поместите rechat.zip, в папку plugins, распакуйте. После этого поместите PocketMine-DevTools.phar в папку plugins
Скачать:
rechat.zip (2,6 МБ)
PocketMine-DevTools.phar (77,9 КБ)

задумка отличная, но реализация зависит от самого плагина на чаты. У тебя всё зависит от нейм тега игрока.

 public function onChat(PlayerChatEvent $event)
    {
        $player = $event->getPlayer();
        $message = $event->getMessage();
        if (str_starts_with($message, "!")) {
            $message = str_replace("!", "", $message);
            foreach ($this->getServer()->getOnlinePlayers() as $players) {
                $players->sendMessage("§c[G] §r" . $player->getNameTag() . "§7:§f " . $message);
            }
        } else {
            foreach ($this->getServer()->getOnlinePlayers() as $players) {
                if ($players->getPosition()->distance($player->getPosition()) < 100) {
                    $players->sendMessage("§e[L] §r" . $player->getNameTag() . "§7:§f " . $message);
                }
            }
        }
        $event->cancel();
    }

да ну и кстати. Если ивент будет отменён, сообщение всё равно отправится.

а вот это уже явно не моя проблема, я предоставил плагин на локальный/глобальный чат, а вот что игроки ставят, явно не моя проблема

хотите лучше - пишите сами

тогда не выставляй это на показ

можно же было добавить просто поддержку PureChat, и на этом можно было закончить

ничего что purechat это во первых помойка, а во вторых он вообще для PMMP4?

мне это говорит человек, который не смог нормально сделать плагин на глобальный и локальный чат

ну напиши лучше, в чем проблема? :joy: или ты хочешь чтобы тебе за бесплатно делали весь сервер?

$event->setFormat('[G] ' . $event->getFormat());

по моему так?

нет

пон

круто наверно событию отправлять сообщение?

у меня и так фулл самопис сборка есть, зачем мне что-то от тебя?

<?php

namespace Plugin\PureChatMOD;

use pocketmine\plugin\PluginBase;

use pocketmine\utils\TextFormat as CLR;

use pocketmine\event\Listener;
use pocketmine\event\player\PlayerChatEvent;

use pocketmine\Player;
use pocketmine\command\ConsoleCommandSender;

class PureChatMOD extends PluginBase implements Listener {
	
	/** @var string */
	private $L;
	private $G;
	private $begin_L;
	private $begin_G;
	private $cache;
	
	/** @var int */
	private $radius;
	private $begin_L_len;
	private $begin_G_len;
	
	/** @var ConsoleCommandSender */
	private $server;
	
	public function onEnable() {
		$this->prepareData();
		
		$this->server = new ConsoleCommandSender;
		
		$this->getServer()->getPluginManager()->registerEvents($this, $this);
	}
	
	/**
	 * @param PlayerChatEvent $e
	 * @priority LOWEST
	 */
	public function partOne(PlayerChatEvent $e) {
		$msg = $e->getMessage();
		if (substr($msg, 0, $this->begin_G_len) === $this->begin_G) {
			$e->setMessage(substr($msg, $this->begin_G_len));
			
			$this->cache = $this->G;
		} elseif (substr($msg, 0, $this->begin_L_len) === $this->begin_L) {
			$e->setMessage(substr($msg, $this->begin_L_len));
			
			$sendTo = [$this->server];
			$sender = $e->getPlayer();
			
			$x = $sender->getFloorX();
			$y = $sender->getFloorY();
			$z = $sender->getFloorZ();
			$r = $this->radius;
			
			foreach ($sender->getLevel()->getPlayers() as $player) {
				if (
					($x - $r) <= $player->getX() && ($x + $r) >= $player->getX() && 
					($y - $r) <= $player->getY() && ($y + $r) >= $player->getY() && 
					($z - $r) <= $player->getZ() && ($z + $r) >= $player->getZ()
				) {
					$sendTo[] = $player;
				}
			}
			$e->setRecipients($sendTo);
			
			$this->cache = $this->L;
		} else {
			$this->cache = '';
		}
	}
	
	/**
	 * @param PlayerChatEvent $e
	 * @priority HIGHEST
	 */
	public function partTwo(PlayerChatEvent $e) {
		$e->setFormat($this->cache . $this->getServer()->getLanguage()->translateString($e->getFormat(), [$e->getPlayer()->getDisplayName(), $e->getMessage()]));
	}
	
	private function prepareData() {
		@mkdir($path = $this->getDataFolder());
		$defaultConfig = stream_get_contents($this->getResource($file = 'config.yml'));
		$defaultData = yaml_parse($defaultConfig);
		if (!file_exists($path .= $file)) {
			file_put_contents($path, $defaultConfig);
			$data = $defaultData;
		} else {
			$newData = @yaml_parse(file_get_contents($path));
			if (!is_array($newData) || empty($newData)) {
				$this->getLogger()->warning('Файл с настройками был повреждён. Он будет ввостановлен в начальный вид');
				file_put_contents($path, $defaultConfig);
				$data = $defaultData;
			} else {
				$data = array_replace($defaultData, $newData);
			}
		}
		
		$this->L = (string) $data['local'];
		$this->G = (string) $data['global'];
		$this->radius = (int) $data['radius'];
		$this->begin_L = (string) $data['begin-local'];
		$this->begin_G = (string) $data['begin-global'];
		$this->begin_L_len = strlen($this->begin_L);
		$this->begin_G_len = strlen($this->begin_G);
	}
	
}

что это

ExtraGL, или хз твой плагин, только лучше

и зачем оно тут нужно

ну так у меня тоже фулл самопис сборка на PMMP5, все прекрасно работает, я не юзаю парашные purechat и тд, я пишу это сам. и лишь решил поделиться с теми, кто вообще даже ЭТОГО не умеют, если ты думаешь что вокруг тебя вращается мир, то это не так