Ir para conteúdo
  • 0

[Resolvido] Enviar mensagem em json?? ;-;


Guest Alomax

Pergunta

Olá alguém sabe como faz pra enviar msg em json em stringlist sla -'


 


 


tipo


 


messages:


- 'Mensagem:Treco que aparece quando passa o mouse em cima'


  - 'Mensagem1:Treco que aparece quando passa o mouse em cima'


Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

Utiliza dessa classe utilitaria

    private String msg;

    public JsonMessage() {
        this.msg = "[{\"text\":\"\",\"extra\":[{\"text\": \"\"}";
    }

    private static Class<?> getNmsClass(String nmsClassName)
            throws ClassNotFoundException {
        return Class.forName("net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3] + "." + nmsClassName);
    }

    private static String getServerVersion() {
        return Bukkit.getServer().getClass().getPackage().getName().substring(23);
    }

    public void send(Player p) {
        String version = getServerVersion();
        String nmsClass = (version.startsWith("v1_8_R") ? "IChatBaseComponent$" : "") + "ChatSerializer";
        try {
            Object comp = getNmsClass(nmsClass).getMethod("a", new Class[]{String.class}).invoke(null, new Object[]{this.msg + "]}]"});
            Object packet = getNmsClass("PacketPlayOutChat").getConstructor(new Class[]{getNmsClass("IChatBaseComponent")}).newInstance(new Object[]{comp});
            Object handle = p.getClass().getMethod("getHandle", new Class[0]).invoke(p, new Object[0]);

            Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
            playerConnection.getClass().getMethod("sendPacket", new Class[]{getNmsClass("Packet")}).invoke(playerConnection, new Object[]{packet});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public JsonStringBuilder append(String text) {
        return new JsonStringBuilder(this, esc(text));
    }

    private static String esc(String s) {
        return JSONObject.escape(s);
    }

    public static class JsonStringBuilder {

        private String click = "";
        private String hover = "";
        private final String string;
        private final JsonMessage message;

        public JsonStringBuilder(JsonMessage msg, String text) {
            this.message = msg;
            this.string = (",{\"text\":\"" + text + "\"");
        }

        public JsonStringBuilder setHoverAsTooltip(String... lore) {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < lore.length; i++) {
                if (i + 1 == lore.length) {
                    builder.append(lore[i]);
                } else {
                    builder.append(lore[i] + "\n");
                }
            }
            this.hover = (",\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"" + JsonMessage.esc(builder.toString()) + "\"}");
            return this;
        }

        public JsonStringBuilder setHoverAsAchievement(String ach) {
            this.hover = (",\"hoverEvent\":{\"action\":\"show_achievement\",\"value\":\"achievement." + JsonMessage.esc(ach) + "\"}");
            return this;
        }

        public JsonStringBuilder setClickAsURL(String link) {
            this.click = (",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + JsonMessage.esc(link) + "\"}");
            return this;
        }

        public JsonStringBuilder setClickAsSuggestCmd(String cmd) {
            this.click = (",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + JsonMessage.esc(cmd) + "\"}");
            return this;
        }

        public JsonStringBuilder setClickAsExecuteCmd(String cmd) {
            this.click = (",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + JsonMessage.esc(cmd) + "\"}");
            return this;
        }

        public JsonMessage save() {
            JsonMessage tmp4_1 = this.message;
            tmp4_1.msg = (tmp4_1.msg + this.string + this.hover + this.click + "}");
            return this.message;
        }
    }
}

Obs: não é minha a classe ela foi publicada no spigo*.com
 

Forma de uso

    public void test(Player player) {
        JsonMessage message = new JsonMessage();
        JsonStringBuilder builder = new JsonStringBuilder(message, "teste ");
        builder.setClickAsExecuteCmd("/teste");
        builder.setClickAsSuggestCmd("/teste");
        builder.setHoverAsTooltip(new String[]{"lore1", "lore2", "lore3"});
        builder.save().send(player);
    }
Link para o comentário
Compartilhar em outros sites

n saquei mt isso ai, tem é um pl, ai eu tenho q usar a api dele? '-'

não, você precisa baixar ele vai vim em .rar dai voce pega a pasta dentro dele e arrasta pro seu projeto no eclipse dai vai criar uma nova package com os treco dele la dai é só usara api

 

https://youtu.be/hYEa8lkZj_s?t=101

Editado por Thelike
Link para o comentário
Compartilhar em outros sites

Guest Mateus Demarchi

Packet

List<String> msg = new ArrayList<>();
msg.forEach(m -> {
    IChatBaseComponent comp = ChatSerializer
            .a("{\"text\":\"" + "" + 
            "\",\"extra\":[{\"text\":\"" + "§e" + m + 
            "\",\"clickEvent\":{\"action\":\"show_text\",\"value\":\"" + 
            "§aAlgo aqui" + "\"}}]}");

PacketPlayOutChat packet = new PacketPlayOutChat(comp, true);
((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
});
Link para o comentário
Compartilhar em outros sites

Guest Mateus Demarchi

 

Não entendo, por que utilizar api sendo que é muito mais simples utilizar direto o packet. Vai ser só mais um plugin a mais que não vai ter tantas utilidades. Da até para criar uma classe para simplificar o packet IChatBaseComponent fica mais leve e -1 plugin no teu servidor.

 

@Edit

 

Essa api do spigot tem um bug na mensagem, não pode pegar duas linhas porque perde a cor.

Editado por Mateus Demarchi
Link para o comentário
Compartilhar em outros sites

Não entendo, por que utilizar api sendo que é muito mais simples utilizar direto o packet. Vai ser só mais um plugin a mais que não vai ter tantas utilidades. Da até para criar uma classe para simplificar o packet IChatBaseComponent fica mais leve e -1 plugin no teu servidor.

O problema amigos e que nem todos sabem mecher com packets nesse caso eu '-'

 

A e isso não e uma api e do próprio spigot :v então não necessita outro plugin nem uma classe :v

Editado por TzMarcio
Link para o comentário
Compartilhar em outros sites

O problema amigos e que nem todos sabem mecher com packets nesse caso eu '-'

 

A e isso não e uma api e do próprio spigot :v então não necessita outro plugin nem uma classe :v

Tem que importar?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...