1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Отправить ошибку на языке клиента.

Тема в разделе "Разработка плагинов для новичков", создана пользователем keltkelt, 25 дек 2017.

Статус темы:
Закрыта.
  1. Автор темы
    keltkelt

    keltkelt Активный участник Пользователь

    Баллы:
    68
    Игрок шепчет определенному игроку командой /tell, а ему должна прийти ошибка "такой игрок не найден".
    Однако, просто послать ему строку не могу, я же не знаю на каком языке его клиент. Как послать игроку эту ошибку, или закрыть игрока для приватных мессаг?

    Причины не играют роли, мне нужно выполнить именно эту задачу.
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ты уж определись, какая у тебя задача.
    Локализация и скрытие игрока - два разных вопроса.
    По поводу локализации. Вроде как в Майне нет сообщений "Игрок такой-то не найден". Если только при работе с командными блоками каким-нибудь. Соответственно, если такого сообщения на клиенте нет, тебе самостоятельно прописать сообщения для всех языков в конфиге.
    Можешь послать игроку нужное сообщение, благо клиент при заходе сам свой язык отправляет.
     
  3. Автор темы
    keltkelt

    keltkelt Активный участник Пользователь

    Баллы:
    68
    Я о сообщении, которое выдается, если набрать /tell с несуществующим игроком. Дело в том, что я скрыл игрока из автоподстановки в чате, но можно по-прежнему отправить ему сообщение вручную. А я делаю невидимку.
     
  4. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    https://www.spigotmc.org/wiki/the-chat-component-api/#client-side-translations
    Честно говоря - не знаю, как именно работает плейсхолдер в строке с переводом(там содержится "%s").
    Предположение во второй строке.

    Код:
    TranslatableComponent tellMsg = new TranslatableComponent( "commands.generic.player.notFound" );
    tellMsg.addWith(args[0]);
    player.spigot().sendMessage(tellMsg);
     
  5. Автор темы
    keltkelt

    keltkelt Активный участник Пользователь

    Баллы:
    68
    Благодарю за ответ! Судя по args[0], выполнение предполагалось в onCommand?
    Странная штука творится. Пока что, вместо args[0] вписал ник. Если делать код в onPlayerJoin:
    Код:
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        TranslatableComponent tellMsg = new TranslatableComponent( "commands.generic.player.notFound" );
        tellMsg.addWith("TestPlayer");
        event.getPlayer().spigot().sendMessage(tellMsg);
    
    Сообщение выводится и переводится.
    Однако, если я располагаю его в onCommand:
    Код:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        TranslatableComponent tellMsg = new TranslatableComponent( "commands.generic.player.notFound" );
        tellMsg.addWith("TestPlayer");
        sender.spigot().sendMessage(tellMsg);
    
    По идее, при любой команде он должен выполниться, но не выполняется.

    p.s. Попробовал sender в Player переделать, но не сработало.
    Код:
    Player pl = Bukkit.getPlayer(sender.getName());
    pl.spigot().sendMessage(tellMsg);
    
    P.P.S Кажется /tell обрабатывается иначе, чем например, мои кастомные команды. При вводе кастомной - срабатывает сообщение, а при вводе tell - нет, будто его вообще не onCommand обрабатывает.
     
    Последнее редактирование: 25 дек 2017
Статус темы:
Закрыта.

Поделиться этой страницей