Ir para conteúdo

JSONMessage - Crie mensagens JSON facilmente e envie a seus players!


Dery

Posts Recomendados

JSONMessages


JSONMessages é uma classe criada por mim para auxiliar a criação de mensagens JSON para minecraft!


 


Código




import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

public class JSONMessage {

public enum ClickAction{
RUN_COMMAND, SUGGEST_COMMAND, OPEN_URL
}

public enum HoverAction{
SHOW_TEXT
}

private static final String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
private static final Pattern pattern = Pattern.compile("([&|§][a-fA-F0-9k-oK-orR]){1}");
private ArrayList<String> partes;
private String json = "";

public JSONMessage(){
json += "[\"\",";
partes = new ArrayList<>();
}

public JSONMessage parseToJSON(String text){
Matcher matcher = pattern.matcher(text);
if(matcher.find()){
String cor = "";
String palavra = "";
String geral = "";
char[] array = text.toCharArray();
for(int j = 0; j<array.length; j++){
if(j+1 != array.length && pattern.matcher(String.valueOf(array[j]) + String.valueOf(array[j+1])).matches()){
cor += String.valueOf(array[j]) + String.valueOf(array[j+1]);
j+=1;
}else{
palavra += array[j];
if(j+1 != array.length){
if(String.valueOf(array[j+1]).matches("&|§")){
/*json += "{\"text\":\"" + palavra + "\"";
json += getFormat(cor);
json += "},";*/
geral += "{\"text\":\"" + palavra + "\"" + getFormat(cor) + "},";
partes.add(geral);
cor = "";
palavra = "";
geral = "";
}
}else{
/*json += "{\"text\":\"" + palavra + "\"";
json += getFormat(cor);
json += "},";*/
geral += "{\"text\":\"" + palavra + "\"" + getFormat(cor) + "},";
partes.add(geral);
geral = "";
}
}
}
}
return this;
}

private String getFormat(String cor){
String retornar = "";
if(cor.matches("(.+)?([&§]0)(.+)?")) retornar += ",\"color\":\"black\"";
if(cor.matches("(.+)?([&§]1)(.+)?")) retornar += ",\"color\":\"dark_blue\"";
if(cor.matches("(.+)?([&§]2)(.+)?")) retornar += ",\"color\":\"dark_green\"";
if(cor.matches("(.+)?([&§]3)(.+)?")) retornar += ",\"color\":\"dark_aqua\"";
if(cor.matches("(.+)?([&§]4)(.+)?")) retornar += ",\"color\":\"dark_red\"";
if(cor.matches("(.+)?([&§]5)(.+)?")) retornar += ",\"color\":\"dark_purple\"";
if(cor.matches("(.+)?([&§]6)(.+)?")) retornar += ",\"color\":\"gold\"";
if(cor.matches("(.+)?([&§]7)(.+)?")) retornar += ",\"color\":\"gray\"";
if(cor.matches("(.+)?([&§]8)(.+)?")) retornar += ",\"color\":\"dark_gray\"";
if(cor.matches("(.+)?([&§]9)(.+)?")) retornar += ",\"color\":\"blue\"";
if(cor.matches("(.+)?([&§]a)(.+)?")) retornar += ",\"color\":\"green\"";
if(cor.matches("(.+)?([&§]b)(.+)?")) retornar += ",\"color\":\"aqua\"";
if(cor.matches("(.+)?([&§]c)(.+)?")) retornar += ",\"color\":\"red\"";
if(cor.matches("(.+)?([&§]d)(.+)?")) retornar += ",\"color\":\"light_purple\"";
if(cor.matches("(.+)?([&§]e)(.+)?")) retornar += ",\"color\":\"yellow\"";
if(cor.matches("(.+)?([&§]f)(.+)?")) retornar += ",\"color\":\"white\"";
if(cor.matches("(.+)?([&§]k)(.+)?")) retornar += ",\"obfuscated\":true";
if(cor.matches("(.+)?([&§]l)(.+)?")) retornar += ",\"bold\":true";
if(cor.matches("(.+)?([&§]m)(.+)?")) retornar += ",\"strikethrough\":true";
if(cor.matches("(.+)?([&§]n)(.+)?")) retornar += ",\"underlined\":true";
if(cor.matches("(.+)?([&§]o)(.+)?")) retornar += ",\"italic\":true";
return retornar;
}

public JSONMessage addText(String text){
if(partes.size()>0){
for(String parte : partes){
json += parte;
}
partes.clear();
}
Matcher matcher = pattern.matcher(text);
if(matcher.find()){
parseToJSON(text);
}else{
json += "{\"text\":\"" + text + "\"},";
}
return this;
}

public JSONMessage withHoverAction(HoverAction hoveraction, String value){
for(int i = 0; i<partes.size(); i++){
String parte = partes.get(i);
if(parte.endsWith("},")) parte = parte.substring(0, parte.length()-2);
parte += ",\"hoverEvent\":{\"action\":\"" + hoveraction.name().toLowerCase() + "\",\"value\":\"" + value + "\"}},";
partes.set(i, parte);
}
return this;
}

public JSONMessage withClickAction(ClickAction clickaction, String value){
for(int i = 0; i<partes.size(); i++){
String parte = partes.get(i);
if(parte.endsWith("},")) parte = parte.substring(0, parte.length()-2);
parte += ",\"clickEvent\":{\"action\":\"" + clickaction.name().toLowerCase() + "\",\"value\":\"" + value + "\"}},";
partes.set(i, parte);
}
return this;
}

public JSONMessage removeLastElement(){
if(partes.size()>0){
for(String parte : partes){
json += parte;
}
partes.clear();
}
this.json = json.substring(0, json.lastIndexOf("{\"text\":\""));
return this;
}

@Override
public String toString(){
return this.json;
}

public void sendJson(Player p){
try {
if(partes.size()>0){
for(String parte : partes){
json += parte;
}
partes.clear();
}
if(json.endsWith(",")) json = json.substring(0, json.length()-1);
if(!json.endsWith("]")) json += "]";
Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
Class<?> chatComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
Class<?> packet = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
Constructor<?> constructor = packet.getConstructor(chatComponent);

Object text = chatSerializer.getMethod("a", String.class).invoke(chatSerializer, json);
Object packetFinal = constructor.newInstance(text);

Object handle = p.getClass().getMethod("getHandle").invoke(p);
Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
playerConnection.getClass().getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")).invoke(playerConnection, packetFinal);
} catch (Exception e) {
e.printStackTrace();
}
}


Sim, é uma baita gambiarra para dar parse de uma String para JSON.



 


Como Usar


Para criar seu texto JSON é bem simples, só faça isso:



Player player = Bukkit.getPlayer("Player");
JSONMessage json = new JSONMessage(); // Inicia uma instância da classe JSONMessage
json.addText("§6Olá ") /* Adiciona um texto "§6Olá " */
.addText("§7GamersBoard") /* Adiciona um texto "§7GamersBoard " */
.withClickAction(ClickAction.OPEN_URL, "http://gamersboard.com.br/index.php") /* Adiciona a ação de abrir a url da GB ao clicar em "§7GamersBoard" */
.withHoverAction(HoverAction.SHOW_TEXT, "§cVá até a §7§lGamersBoard " + player.getName() + "§c!"); /* Adiciona a ação de mostrar um texto ao passar o mouse em cima de "§7GamersBoard" */
.addText("§6!"); /* Adiciona um text "§6!" */
json.sendJson(player); /* Envia o json a um player */

UPDATES


 


05/05/2017 18:54 - Corrigido bug não poder enviar o mesmo JSON para vários players.


29/03/2017 16:43 - Corrigido bug de adicionar HoverAction ou ClickAction em texto com várias cores ou/e formatos.


 


Créditos


@Dery


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

 

JSONMessages

JSONMessages é uma classe criada por mim para auxiliar a criação de mensagens JSON para minecraft!

 

Código

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

public class JSONMessage {

	public enum ClickAction{
		RUN_COMMAND, SUGGEST_COMMAND, OPEN_URL
	}

	public enum HoverAction{
		SHOW_TEXT
	}

	private static final String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
	private static final Pattern pattern = Pattern.compile("([&|§][a-fA-F0-9k-oK-orR]){1}");
	private ArrayList<String> partes;
	private String json = "";

	public JSONMessage(){
		json += "[\"\",";
		partes = new ArrayList<>();
	}

	public JSONMessage parseToJSON(String text){
		Matcher matcher = pattern.matcher(text);
		if(matcher.find()){
			String cor = "";
			String palavra = "";
			String geral = "";
			char[] array = text.toCharArray();
			for(int j = 0; j<array.length; j++){
				if(j+1 != array.length && pattern.matcher(String.valueOf(array[j]) + String.valueOf(array[j+1])).matches()){
					cor += String.valueOf(array[j]) + String.valueOf(array[j+1]);
					j+=1;
				}else{
					palavra += array[j];
					if(j+1 != array.length){
						if(String.valueOf(array[j+1]).matches("&|§")){
							geral += "{\"text\":\"" + palavra + "\"" + getFormat(cor) + "},";
							partes.add(geral);
							cor = "";
							palavra = "";
							geral = "";
						}
					}else{
						geral += "{\"text\":\"" + palavra + "\"" + getFormat(cor) + "},";
						partes.add(geral);
						geral = "";
					}
				}
			}
		}
		return this;
	}

	private String getFormat(String cor){
		String retornar = "";
		if(cor.matches("(.+)?([&§]0)(.+)?")) retornar += ",\"color\":\"black\"";
		if(cor.matches("(.+)?([&§]1)(.+)?")) retornar += ",\"color\":\"dark_blue\"";
		if(cor.matches("(.+)?([&§]2)(.+)?")) retornar += ",\"color\":\"dark_green\"";
		if(cor.matches("(.+)?([&§]3)(.+)?")) retornar += ",\"color\":\"dark_aqua\"";
		if(cor.matches("(.+)?([&§]4)(.+)?")) retornar += ",\"color\":\"dark_red\"";
		if(cor.matches("(.+)?([&§]5)(.+)?")) retornar += ",\"color\":\"dark_purple\"";
		if(cor.matches("(.+)?([&§]6)(.+)?")) retornar += ",\"color\":\"gold\"";
		if(cor.matches("(.+)?([&§]7)(.+)?")) retornar += ",\"color\":\"gray\"";
		if(cor.matches("(.+)?([&§]8)(.+)?")) retornar += ",\"color\":\"dark_gray\"";
		if(cor.matches("(.+)?([&§]9)(.+)?")) retornar += ",\"color\":\"blue\"";
		if(cor.matches("(.+)?([&§]a)(.+)?")) retornar += ",\"color\":\"green\"";
		if(cor.matches("(.+)?([&§]b)(.+)?")) retornar += ",\"color\":\"aqua\"";
		if(cor.matches("(.+)?([&§]c)(.+)?")) retornar += ",\"color\":\"red\"";
		if(cor.matches("(.+)?([&§]d)(.+)?")) retornar += ",\"color\":\"light_purple\"";
		if(cor.matches("(.+)?([&§]e)(.+)?")) retornar += ",\"color\":\"yellow\"";
		if(cor.matches("(.+)?([&§]f)(.+)?")) retornar += ",\"color\":\"white\"";
		if(cor.matches("(.+)?([&§]k)(.+)?")) retornar += ",\"obfuscated\":true";
		if(cor.matches("(.+)?([&§]l)(.+)?")) retornar += ",\"bold\":true";
		if(cor.matches("(.+)?([&§]m)(.+)?")) retornar += ",\"strikethrough\":true";
		if(cor.matches("(.+)?([&§]n)(.+)?")) retornar += ",\"underlined\":true";
		if(cor.matches("(.+)?([&§]o)(.+)?")) retornar += ",\"italic\":true";
		return retornar;
	}

	public JSONMessage addText(String text){
		if(partes.size()>0){
			for(String parte : partes){
				json += parte;
			}
			partes.clear();
		}
		Matcher matcher = pattern.matcher(text);
		if(matcher.find()){
			parseToJSON(text);
		}else{
			json += "{\"text\":\"" + text + "\"},";
		}
		return this;
	}

	public JSONMessage withHoverAction(HoverAction hoveraction, String value){
		for(int i = 0; i<partes.size(); i++){
			String parte = partes.get(i);
			if(parte.endsWith("},")) parte = parte.substring(0, parte.length()-2);
			parte += ",\"hoverEvent\":{\"action\":\"" + hoveraction.name().toLowerCase() + "\",\"value\":\"" + value + "\"}},";
			partes.set(i, parte);
		}
		return this;
	}

	public JSONMessage withClickAction(ClickAction clickaction, String value){
		for(int i = 0; i<partes.size(); i++){
			String parte = partes.get(i);
			if(parte.endsWith("},")) parte = parte.substring(0, parte.length()-2);
			parte += ",\"clickEvent\":{\"action\":\"" + clickaction.name().toLowerCase() + "\",\"value\":\"" + value + "\"}},";
			partes.set(i, parte);
		}
		return this;
	}

	public JSONMessage removeLastElement(){
		if(partes.size()>0){
			for(String parte : partes){
				json += parte;
			}
			partes.clear();
		}
		this.json = json.substring(0, json.lastIndexOf("{\"text\":\""));
		return this;
	}

	@Override
	public String toString(){
		return this.json;
	}

	public void sendJson(Player p){
		try {
			if(partes.size()>0){
				for(String parte : partes){
					json += parte;
				}
				partes.clear();
			}
			if(json.endsWith(",")) json = json.substring(0, json.length()-1);
			json += "]";
			Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
			Class<?> chatComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
			Class<?> packet = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
			Constructor<?> constructor = packet.getConstructor(chatComponent);

			Object text = chatSerializer.getMethod("a", String.class).invoke(chatSerializer, json);
			Object packetFinal = constructor.newInstance(text);

			Object handle = p.getClass().getMethod("getHandle").invoke(p);
			Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
			playerConnection.getClass().getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet")).invoke(playerConnection, packetFinal);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

} 

Sim, é uma baita gambiarra para dar parse de uma String para JSON.

 

Como Usar

Para criar seu texto JSON é bem simples, só faça isso:

Player player = Bukkit.getPlayer("Player");
JSONMessage json = new JSONMessage(); // Inicia uma instância da classe JSONMessage
json.addText("§6Olá ") /* Adiciona um texto "§6Olá " */
	.addText("§7GamersBoard") /* Adiciona um texto "§7GamersBoard " */
	.withClickAction(ClickAction.OPEN_URL, "http://gamersboard.com.br/index.php") /* Adiciona a ação de abrir a url da GB ao clicar em "§7GamersBoard" */
	.withHoverAction(HoverAction.SHOW_TEXT, "§cVá até a §7§lGamersBoard " + player.getName() + "§c!"); /* Adiciona a ação de mostrar um texto ao passar o mouse em cima de "§7GamersBoard" */
	.addText("§6!"); /* Adiciona um text "§6!" */
json.sendJson(player); /* Envia o json a um player */

UPDATES

 

29/03/2017 16:43 - Corrigido bug de adicionar HoverAction ou ClickAction em texto com várias cores ou/e formatos.

 

Créditos

@Dery

 

Ainda não usei sua classe, mas devo usar no meu projeto atual...

Ela está funcionando sem problemas?

Link para o comentário
Compartilhar em outros sites

Seguinte, na parte do código:

Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");

 

Altera para:

Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".ChatSerializer");

Link para o comentário
Compartilhar em outros sites

Tentei usar mas não tive bons resultados, quando eu dou o comando ele envia o json normal e pega normalmente, mas se eu enviar o comando novamente retorna o erro no console que tá abaixo e não envia o json ;-;


 


código: 



JSONMessage json = new JSONMessage();


@SuppressWarnings("deprecation")
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

Player p = (Player) sender;
Player pj = Bukkit.getPlayer(p.getName());

if(cmd.getName().equalsIgnoreCase("json")){
p.sendMessage("§6Este é um Json:");


json.addText("§eteste")
.addText("§cCLIQUE AQUI")
.withClickAction(ClickAction.SUGGEST_COMMAND, "/invsee")
.withHoverAction(HoverAction.SHOW_TEXT, "§cinv de player" + p.getName() + "§c!");

//tentei assim -> json.sendJson(pj);
// e assim - > json.sendJson(p);



}

return false;
}



 


erro:



[12:10:22 INFO]: QuackQuacks issued server command: /json
[12:10:22 WARN]: java.lang.reflect.InvocationTargetException
[12:10:22 WARN]: at sun.reflect.GeneratedMethodAccessor78.invoke(Unknown
Source)
[12:10:22 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Deleg
atingMethodAccessorImpl.java:43)
[12:10:22 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
[12:10:22 WARN]: at me.lucas.lcJson.JSONMessage.sendJson(JSONMessage.java
:156)
[12:10:22 WARN]: at me.lucas.lcJson.Main.onCommand(Main.java:49)
[12:10:22 WARN]: at org.bukkit.command.PluginCommand.execute(PluginComman
d.java:44)
[12:10:22 WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCo
mmandMap.java:141)
[12:10:22 WARN]: at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCo
mmand(CraftServer.java:646)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.PlayerConnection.handleC
ommand(PlayerConnection.java:1115)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.PlayerConnection.a(Playe
rConnection.java:950)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(Packe
tPlayInChat.java:26)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(Packe
tPlayInChat.java:53)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.PacketHandleTask.run(Sou
rceFile:13)
[12:10:22 WARN]: at java.util.concurrent.Executors$RunnableAdapter.call(E
xecutors.java:511)
[12:10:22 WARN]: at java.util.concurrent.FutureTask.run(FutureTask.java:2
66)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.MinecraftServer.z(Minecr
aftServer.java:696)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.DedicatedServer.z(Dedica
tedServer.java:316)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.MinecraftServer.y(Minecr
aftServer.java:634)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.MinecraftServer.run(Mine
craftServer.java:537)
[12:10:22 WARN]: at java.lang.Thread.run(Thread.java:745)
[12:10:22 WARN]: Caused by: org.bukkit.craftbukkit.libs.com.google.gson.JsonSynt
axException: org.bukkit.craftbukkit.libs.com.google.gson.stream.MalformedJsonExc
eption: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 colum
n 532
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.Gson.asse
rtFullConsumption(Gson.java:779)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:769)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:717)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:689)
[12:10:22 WARN]: at net.minecraft.server.v1_8_R1.ChatSerializer.a(SourceF
ile:199)
[12:10:22 WARN]: ... 20 more
[12:10:22 WARN]: Caused by: org.bukkit.craftbukkit.libs.com.google.gson.stream.M
alformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON
at line 1 column 532
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.syntaxError(JsonReader.java:1505)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.checkLenient(JsonReader.java:1386)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.doPeek(JsonReader.java:531)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.peek(JsonReader.java:414)
[12:10:22 WARN]: at org.bukkit.craftbukkit.libs.com.google.gson.Gson.asse
rtFullConsumption(Gson.java:775)
[12:10:22 WARN]: ... 24 more
>
Link para o comentário
Compartilhar em outros sites

 

Tentei usar mas não tive bons resultados, quando eu dou o comando ele envia o json normal e pega normalmente, mas se eu enviar o comando novamente retorna o erro no console que tá abaixo e não envia o json ;-;

 

código: 

	JSONMessage json = new JSONMessage();
	
	
	@SuppressWarnings("deprecation")
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		
		Player p = (Player) sender;
		Player pj = Bukkit.getPlayer(p.getName());
		
		if(cmd.getName().equalsIgnoreCase("json")){
		p.sendMessage("§6Este é um Json:");
		
		
		json.addText("§eteste") 
		.addText("§cCLIQUE AQUI") 
		.withClickAction(ClickAction.SUGGEST_COMMAND, "/invsee")
		.withHoverAction(HoverAction.SHOW_TEXT, "§cinv de player" + p.getName() + "§c!");
		
		//tentei assim -> json.sendJson(pj);
		// e assim - > json.sendJson(p);
		
		
		
		}
		
		return false;
	}
	
	

erro:

[12:10:22 INFO]: QuackQuacks issued server command: /json
[12:10:22 WARN]: java.lang.reflect.InvocationTargetException
[12:10:22 WARN]:        at sun.reflect.GeneratedMethodAccessor78.invoke(Unknown
Source)
[12:10:22 WARN]:        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Deleg
atingMethodAccessorImpl.java:43)
[12:10:22 WARN]:        at java.lang.reflect.Method.invoke(Method.java:498)
[12:10:22 WARN]:        at me.lucas.lcJson.JSONMessage.sendJson(JSONMessage.java
:156)
[12:10:22 WARN]:        at me.lucas.lcJson.Main.onCommand(Main.java:49)
[12:10:22 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginComman
d.java:44)
[12:10:22 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCo
mmandMap.java:141)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCo
mmand(CraftServer.java:646)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.PlayerConnection.handleC
ommand(PlayerConnection.java:1115)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.PlayerConnection.a(Playe
rConnection.java:950)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(Packe
tPlayInChat.java:26)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(Packe
tPlayInChat.java:53)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(Sou
rceFile:13)
[12:10:22 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(E
xecutors.java:511)
[12:10:22 WARN]:        at java.util.concurrent.FutureTask.run(FutureTask.java:2
66)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.z(Minecr
aftServer.java:696)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.DedicatedServer.z(Dedica
tedServer.java:316)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.y(Minecr
aftServer.java:634)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.MinecraftServer.run(Mine
craftServer.java:537)
[12:10:22 WARN]:        at java.lang.Thread.run(Thread.java:745)
[12:10:22 WARN]: Caused by: org.bukkit.craftbukkit.libs.com.google.gson.JsonSynt
axException: org.bukkit.craftbukkit.libs.com.google.gson.stream.MalformedJsonExc
eption: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 colum
n 532
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.Gson.asse
rtFullConsumption(Gson.java:779)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:769)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:717)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.Gson.from
Json(Gson.java:689)
[12:10:22 WARN]:        at net.minecraft.server.v1_8_R1.ChatSerializer.a(SourceF
ile:199)
[12:10:22 WARN]:        ... 20 more
[12:10:22 WARN]: Caused by: org.bukkit.craftbukkit.libs.com.google.gson.stream.M
alformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON
at line 1 column 532
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.syntaxError(JsonReader.java:1505)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.checkLenient(JsonReader.java:1386)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.doPeek(JsonReader.java:531)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.stream.Js
onReader.peek(JsonReader.java:414)
[12:10:22 WARN]:        at org.bukkit.craftbukkit.libs.com.google.gson.Gson.asse
rtFullConsumption(Gson.java:775)
[12:10:22 WARN]:        ... 24 more
>

seu cod q ta errado ^^ aqui funfou perfeito

Link para o comentário
Compartilhar em outros sites

seu cod q ta errado ^^ aqui funfou perfeito

onde que isso tá errado?

	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		
		Player p = (Player) sender;
		
		if(cmd.getName().equalsIgnoreCase("json")){
		p.sendMessage("§6Este é um Json:");

		
		
		}
		
		return false;
	}
Link para o comentário
Compartilhar em outros sites

LucasCavalcante_, em 26 Abr 2017 - 09:34 AM, disse:

 

 

onde que isso tá errado?

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {				Player p = (Player) sender;				if(cmd.getName().equalsIgnoreCase("json")){		p.sendMessage("§6Este é um Json:");						}				return false;	}
	@EventHandler
	public void TesteE(PlayerJoinEvent a) {
		Player p = a.getPlayer();

		Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {

			@Override
			public void run() {

				Json json = new Json();
				json.addText("§6Olá ").addText("§7GamersBoard")
						.withClickAction(ClickAction.OPEN_URL, "http://gamersboard.com.br/index.php")
						.withHoverAction(HoverAction.SHOW_TEXT, "§cVá até a §7§lGamersBoard " + p.getName() + "§c!");
				json.sendJson(p);

				Json a = new Json();
				a.addText("eae men");
				a.sendJson(p);

			}
		}, 0, 20L * 5);

	}

}
Editado por Nome de Exibição
Link para o comentário
Compartilhar em outros sites

Não funcionou, deu erro dizendo que as classes não existiam (ChatSerializer) .. removi o reflection e fiz sem reflection mesmo no sendJson() e ae não deu erro mas também não funcionou.. mandou a msg em branco sem hover ou click

                    JSONMessage jsonMessage1 = new JSONMessage().addText("ola1").withHoverAction(JSONMessage.HoverAction.SHOW_TEXT, "tudo bem?");
                    jsonMessage1.sendJson((Player) sender);
                    JSONMessage jsonMessage2 = new JSONMessage().addText("ola2").withClickAction(JSONMessage.ClickAction.RUN_COMMAND, "l oe");
                    jsonMessage2.sendJson((Player) sender);

@edit

agora as vezes funciona, mas nesses simples "ola1" não funciona :/ iih cara tou muito bugado 

 

@edit2

aah mano porque está aconteçendo isso?  :headbang:

                    JSONMessage jsonMessage = new JSONMessage();
                    jsonMessage.addText("&3&l» &b");
                    jsonMessage.addText(clanColoredTag.replaceAll("&", "§")) // "§6GmB"
                        .withClickAction(JSONMessage.ClickAction.RUN_COMMAND, "/clan info " + clanPlayer.getClan().getTag()) // "GmB"
                        .withHoverAction(JSONMessage.HoverAction.SHOW_TEXT, hoverMessage); // uma msg muuito grande
                    jsonMessage.addText(" &7- &b");
                    jsonMessage.addText(clanName) // "Gamers Board"
                        .withClickAction(JSONMessage.ClickAction.RUN_COMMAND, "/clan info " + clanPlayer.getClan().getTag())
                        .withHoverAction(JSONMessage.HoverAction.SHOW_TEXT, hoverMessage);
                    jsonMessage.sendJson((Player) sender);

aqui usei exatamento os mesmo métodos para o texto clanColoredTag e clanName, porém só o clanColoredTag funcionou, o clanName ficou em branco e não aconteçeu nada
será que é pelo tamanho? mas eu estou tentando com o "ola1" também e não funciona também

@edit3

Sim, outro edit.

Cara, reparei que a única diferença é que a tag tem § , então tentei colocar § lá no "ola1" , no clanName, etc.. e já funciona, já está aparecendo o hover e o click.

Não tem como arrumar isso? o json só funciona se o text tiver §

 

@edit4

sim, outro fucking edit.

Então, já coloquei § em todo lado mas.. era para ser preciso mesmo colocar § em todo lado? coloca um aviso no tópico ou arruma isso, fiquei muito tempo bugado nisso. :kk:

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

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...