Вопрос Как отправить JSON сообщение?

Фионит

Пользователь
Сообщения
160
Решения
1
В общем решил сделать JSON сообщение которое будет отправляться игроку по вводу команды. Но при вводе команды выводится такое сообщение,
Вам необходимо зарегистрироваться для просмотра изображений-вложений

поискав информация на форумах я нашел, что надо использовать player.spigot().sendMessage(msg); но IDEA выдает ошибку: Cannot resolve method 'sendMessage(java.lang.String)". Как тогда сделать JSON сообщение? Заранее спасибо :3
Java:
package org.fionitos.townyask.Commands;

import net.md_5.bungee.api.chat.*;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import org.jetbrains.annotations.NotNull;

public class TaskCommand implements CommandExecutor {

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
        if(!(sender instanceof Player)) return true;

        TextComponent msg = new TextComponent("§f[Принять в город]");
        msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aОтправить приглашение в город").create()));
        msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/t invite Fionit"));

        if(command.getName().equalsIgnoreCase("city")){
                if(args.length == 1 && args[0].equalsIgnoreCase("ask"))

                    sender.sendMessage(ChatColor.GRAY + "Игрок хочет попроситься в городу! " + msg);
                    sender.sendMessage(ChatColor.GRAY + "Ваш запрос доставлен");
                    return true;
        }
        return false;
    }

}
 
Решение
А как тогда отправить сообщение тип текст и потом вот этот json?
Java:
        TextComponent msg = new TextComponent();
        msg.addExtra("Your text ");
        TextComponent clickableText = new TextComponent("[Clickable]");
        clickableText.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say clickable test!"));
        clickableText.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("It's clickable text!").create()));
        msg.addExtra(clickableText);
        sender.sendMessage(msg);
А как тогда отправить сообщение тип текст и потом вот этот json?
Java:
        TextComponent msg = new TextComponent();
        msg.addExtra("Your text ");
        TextComponent clickableText = new TextComponent("[Clickable]");
        clickableText.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say clickable test!"));
        clickableText.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("It's clickable text!").create()));
        msg.addExtra(clickableText);
        sender.sendMessage(msg);
 
Java:
        TextComponent msg = new TextComponent();
        msg.addExtra("Your text ");
        TextComponent clickableText = new TextComponent("[Clickable]");
        clickableText.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say clickable test!"));
        clickableText.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("It's clickable text!").create()));
        msg.addExtra(clickableText);
        sender.sendMessage(msg);
я вот так сделал
Java:
TextComponent msg = new TextComponent("§f[Принять в город]");
TextComponent town = new TextComponent("§7Игрок " + sender.getName() + " желает присоединиться в городу! ");
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aОтправить приглашение в город").create()));
msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/t invite " + sender.getName()));
player.sendMessage(town, msg);
 
Java:
        TextComponent msg = new TextComponent();
        msg.addExtra("Your text ");
        TextComponent clickableText = new TextComponent("[Clickable]");
        clickableText.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/say clickable test!"));
        clickableText.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("It's clickable text!").create()));
        msg.addExtra(clickableText);
        sender.sendMessage(msg);
Можешь подсказать, как подобное сейчас можно сделать, на версии 1.19? Пытаюсь так-же сделать - получается муть какая-то.

Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Можешь подсказать, как подобное сейчас можно сделать, на версии 1.19? Пытаюсь так-же сделать - получается муть какая-то.

1656133305783.png
попробуй добавить импорты
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
(Если всё перечеркнёт, то так и нужно. Должно работать.)

вместо net.kyori.adventure.text.TextComponent;
 
Если всё перечеркнёт, то так и нужно
Ну не совсем. Это будет означать, что они стали устаревшими для Paper и стоит использовать что-то другое, если плагин будет поддерживать только Paper и его форки. Если хочешь оставить поддержку Spigot, то следует использовать старые TextComponent.
Java:
    public void sendExampleComponent(Player player) {
        TextComponent component = Component.empty()
                .append(Component.text("This is example component"))
                .append(Component.space())
                .append(Component.text("[Click me!]", TextColor.fromHexString("#d4f282"))
                        .clickEvent(ClickEvent.runCommand("This is amazing! It is working!"))
                        .hoverEvent(HoverEvent.showText(Component.text("What is it?"))))
                .append(Component.space())
                .append(Component.text("and this is end of this component"));
        player.sendMessage(component);
    }
 
Если хочешь оставить поддержку Spigot, то следует использовать старые TextComponent.
Не стоит использовать старые компоненты вообще. Для того, чтобы была поддержка старья, существуют сериализаторы Adventure, которые могут конвертировать новые компоненты в старые. Ну или можно использовать BukkitAudiences, если речь только об отправке сообщений, а не использовании при киках, например
 
Для того, чтобы была поддержка старья, существуют сериализаторы Adventure, которые могут конвертировать новые компоненты в старые.
Расскажи подробнее или дай ссылку для ознакомления.
 
flaweoff,

Спигот использует bungeecord-chat компоненты. Можно использовать BungeeCordComponentSerializer, чтобы конвертировать Component в TextComponent, грубо говоря
 
Назад
Сверху Снизу