Guest Alomax Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 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 More sharing options...
Karamujo Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 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 More sharing options...
Thelike Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 https://github.com/mkremins/fanciful Link para o comentário Compartilhar em outros sites More sharing options...
Guest Alomax Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 https://github.com/mkremins/fanciful n saquei mt isso ai, tem é um pl, ai eu tenho q usar a api dele? '-' Link para o comentário Compartilhar em outros sites More sharing options...
Thelike Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 (editado) 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 Julho 13, 2016 por Thelike Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 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 More sharing options...
TzMarcio Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 https://www.spigotmc.org/wiki/the-chat-component-api/ mais fácil esse '-' Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 (editado) https://www.spigotmc.org/wiki/the-chat-component-api/ mais fácil esse '-' 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 Julho 13, 2016 por Mateus Demarchi Link para o comentário Compartilhar em outros sites More sharing options...
TzMarcio Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 (editado) 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 Julho 13, 2016 por TzMarcio Link para o comentário Compartilhar em outros sites More sharing options...
Guest Alomax Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 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 More sharing options...
TzMarcio Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 Tem que importar? sim Link para o comentário Compartilhar em outros sites More sharing options...
Guest Alomax Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 sim oq Link para o comentário Compartilhar em outros sites More sharing options...
Guest Alomax Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 Resolvido Link para o comentário Compartilhar em outros sites More sharing options...
Guest Piole_BR Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Thelike Postado Julho 13, 2016 Denunciar Compartilhar Postado Julho 13, 2016 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Alomax
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