package mkremins.fanciful;

import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.libs.com.google.gson.stream.JsonWriter;

final class MessagePart {

	ChatColor color = ChatColor.WHITE;
	ChatColor[] styles = {};
	String clickActionName = null, clickActionData = null,
		   hoverActionName = null, hoverActionData = null;
	final String text;

	MessagePart(final String text) {
		this.text = text;
	}

	JsonWriter writeJson(JsonWriter json) {
		try {
			json.beginObject().name("text").value(text);
			json.name("color").value(color.name().toLowerCase());
			for (final ChatColor style : styles) {
				json.name(style.name().toLowerCase()).value(true);
			}
			if (clickActionName != null && clickActionData != null) {
				json.name("clickEvent")
					.beginObject()
					.name("action").value(clickActionName)
					.name("value").value(clickActionData)
					.endObject();
			}
			if (hoverActionName != null && hoverActionData != null) {
				json.name("hoverEvent")
					.beginObject()
					.name("action").value(hoverActionName)
					.name("value").value(hoverActionData)
					.endObject();
			}
			return json.endObject();
		} catch(Exception e){
			e.printStackTrace();
			return json;
		}
	}

}

@@ -590,32 +590,174 @@
 : styles) %7B%0A%09%09%09%09
+if (style == ChatColor.MAGIC) %7B%0A                    %09%09%09json.name(%22obfuscated%22).value(true);%0A                %09%09%7D else %7B%0A                    %09%09%09
 json.name(style.
@@ -791,16 +791,36 @@
 (true);%0A
+                %09%09%7D%0A
 %09%09%09%7D%0A%09%09%09

Update to MessageFix, plaster JSON <-> ChatColor