Помогите Работа с ActionBar

Artem99z

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
ReDcTiOn
У меня плагин выводит название региона в ActionBar`e, как сделать так, чтобы по определенной команде плагин отключался для игрока?

Использую Spigot 1.10
 
У меня плагин выводит название региона в ActionBar`e, как сделать так, чтобы по определенной команде плагин отключался для игрока?

Использую Spigot 1.10
Создай для каждого игрока переменную,игрок пишет команду для него эта переменная становится false.Если эта переменная равна false ,то не выводи название региона.
 
Создай для каждого игрока переменную,игрок пишет команду для него эта переменная становится false.Если эта переменная равна false ,то не выводи название региона.
Можно пример кода?
 
Я не знаю твой код, не знаю как выводишь.Я просто дал идею как это можно реализовать.
По твоим словам, у меня выводится такая картинка: При заходе на сервер, в файл записывайте ник игрока со значение true "player: true", при написание команды, в файле это значение меняется.
 
По твоим словам, у меня выводится такая картинка: При заходе на сервер, в файл записывайте ник игрока со значение true "player: true", при написание команды, в файле это значение меняется.
Именно так
 
Если я вывожу текст в ActionBar вот так:
Код:
    public static void sendAction(Player player, String msg)
    {
        if(player.hasPermission("regionname.use"))
        {   
        CraftPlayer p = (CraftPlayer) player;
        IChatBaseComponent cbc = IChatBaseComponent.ChatSerializer.a((String) ("{\"text\": \"" + msg + "\"}"));
        PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2);
        p.getHandle().playerConnection.sendPacket((Packet<?>) ppoc);
        }
    }
как сделать наоборот? отключение этой функции.
 
Если я вывожу текст в ActionBar вот так:
Код:
    public static void sendAction(Player player, String msg)
    {
        if(player.hasPermission("regionname.use"))
        {  
        CraftPlayer p = (CraftPlayer) player;
        IChatBaseComponent cbc = IChatBaseComponent.ChatSerializer.a((String) ("{\"text\": \"" + msg + "\"}"));
        PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2);
        p.getHandle().playerConnection.sendPacket((Packet<?>) ppoc);
        }
    }
как сделать наоборот? отключение этой функции.
Ну, во-первых, для таких вещей лучше делать рефлексию.
 
Не лучше. Что прямое использование, что рефлексия - всё нормально.
С ней ты не будешь зависеть от версии. Что уже +.
Но вот её быстродействие оставляет желать лучшего.
 
С ней ты не будешь зависеть от версии. Что уже +.
Вообще то в лбом случае тебе придётся ручками обновлять плагин до на следующую версию. Потому что могут быть баги, могут быть исправления.
Если плагин уже готов, то да - рефлексия будет лучше. Но лично мне не так уж и трудно уделить пару минут для написания новой реализации под nms.
 
Вообще то в лбом случае тебе придётся ручками обновлять плагин до на следующую версию. Потому что могут быть баги, могут быть исправления.
Если плагин уже готов, то да - рефлексия будет лучше. Но лично мне не так уж и трудно уделить пару минут для написания новой реализации под nms.
Кому как :)
А по теме, делайте проверку в вашем же евенте на какое-либо событие.
Скажем создайте аррайлист с плеерами и при определённой команде, добавляйте туда нужного игрока. В евенте проверяйте, есть ли игрок в листе, и если есть - отменяйте / возвращайте евент.

Если это - дикий костыль, то увы. Ничего лучше придумать не могу.
 
Последнее редактирование:
У меня тоже появился подобный плаг, но он не требует каких либо прав. Регион показывается когда игрок перешел в новый регион, потом надпись изчезает.


P.s по поводу рефлесий, я юзаю шедулер раз в n сек, так что потеря скорости в пару миллисекунд, не играет никакой роли.
 
Назад
Верх