Skip to content
This repository was archived by the owner on Apr 7, 2021. It is now read-only.

Commit

Permalink
Fix actionbar text displayed in chat and chat issue with servers (#148)
Browse files Browse the repository at this point in the history
  • Loading branch information
francois76 authored and lukeeey committed Dec 21, 2017
1 parent dc12d4f commit 3296e29
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,70 @@
import com.github.steveice10.mc.protocol.data.message.ChatColor;
import com.github.steveice10.mc.protocol.data.message.ChatFormat;
import com.github.steveice10.mc.protocol.data.message.Message;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.util.List;

public final class MessageTranslator {

public static String translate(Message message) {
JsonParser parser = new JsonParser();
if(isMessage(message.getText())){
JsonObject o = parser.parse(message.getText()).getAsJsonObject();
editJson(o);
message = Message.fromJson((JsonElement) o);
}
StringBuilder build = new StringBuilder(message.getText());
for (Message msg : message.getExtra()) {
build.append(toMinecraftColor(msg.getStyle().getColor()));
build.append(toMinecraftFormat(msg.getStyle().getFormats()));
build.append(msg.getFullText());
if(!(msg.getText()==null)){
build.append(translate(msg));
}
}
return build.toString();

}

public static boolean isMessage(String text) {
JsonParser parser = new JsonParser();
try{
JsonObject o = parser.parse(text).getAsJsonObject();
editJson(o);
try{
Message.fromJson((JsonElement) o);
}catch(Exception e){
return false;
}
}catch(Exception e){
return false;
}
return true;
}

public static void editJson(JsonObject o) {
if(o.has("hoverEvent")) {
JsonObject sub = (JsonObject) o.get("hoverEvent");
JsonElement e = sub.get("value");
if(e instanceof JsonArray){
JsonObject newobj = new JsonObject();
newobj.add("extra", e);
newobj.addProperty("text", "");
sub.remove("value");
sub.add("value", newobj);
}
}
if(o.has("extra")) {
JsonArray a = o.getAsJsonArray("extra");
for(int i = 0; i<a.size();i++) {
editJson((JsonObject)a.get(i));
}
}
}


public static String toMinecraftColor(ChatColor color) {
String base = "\u00a7";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,27 @@ public class PCChatPacketTranslator implements IPCPacketTranslator<ServerChatPac

public PEPacket[] translate(UpstreamSession session, ServerChatPacket packet) {
TextPacket pe = new TextPacket();
if (packet.getMessage() instanceof TranslationMessage) {
pe.type = TYPE_TRANSLATION;
pe.message = pe.message = MessageTranslator.translate(packet.getMessage());
} else {
pe.type = TYPE_RAW;
pe.message = pe.message = MessageTranslator.translate(packet.getMessage());
pe.message = pe.message = MessageTranslator.translate(packet.getMessage());
switch(packet.getType()) {
case NOTIFICATION:
pe.type = TYPE_POPUP;
break;
case CHAT:
if (packet.getMessage() instanceof TranslationMessage) {
pe.type = TYPE_TRANSLATION;
} else {
pe.type = TYPE_RAW;
}
break;
case SYSTEM:
if (packet.getMessage() instanceof TranslationMessage) {
pe.type = TYPE_TRANSLATION;
} else {
pe.type = TYPE_RAW;
}
break;
}

return new PEPacket[]{pe};

// TODO: Detect type
/*
* Reset the chat message so we can parse the JSON again (if needed)
*/
/*
* switch (packet.getType()) { case CHAT: ret.type = ChatPacket.TextType.CHAT;
* break; case NOTIFICATION: case SYSTEM: default: ret.type =
* ChatPacket.TextType.CHAT; break; } return new PEPacket[]{ret};
*/
}
}

0 comments on commit 3296e29

Please sign in to comment.