#3018: Serialize text component properties in the same order as Minecraft
This commit is contained in:
		| @@ -22,14 +22,6 @@ public class BaseComponentSerializer | |||||||
|  |  | ||||||
|     protected void deserialize(JsonObject object, BaseComponent component, JsonDeserializationContext context) |     protected void deserialize(JsonObject object, BaseComponent component, JsonDeserializationContext context) | ||||||
|     { |     { | ||||||
|         if ( object.has( "color" ) ) |  | ||||||
|         { |  | ||||||
|             component.setColor( ChatColor.of( object.get( "color" ).getAsString() ) ); |  | ||||||
|         } |  | ||||||
|         if ( object.has( "font" ) ) |  | ||||||
|         { |  | ||||||
|             component.setFont( object.get( "font" ).getAsString() ); |  | ||||||
|         } |  | ||||||
|         if ( object.has( "bold" ) ) |         if ( object.has( "bold" ) ) | ||||||
|         { |         { | ||||||
|             component.setBold( object.get( "bold" ).getAsBoolean() ); |             component.setBold( object.get( "bold" ).getAsBoolean() ); | ||||||
| @@ -50,14 +42,14 @@ public class BaseComponentSerializer | |||||||
|         { |         { | ||||||
|             component.setObfuscated( object.get( "obfuscated" ).getAsBoolean() ); |             component.setObfuscated( object.get( "obfuscated" ).getAsBoolean() ); | ||||||
|         } |         } | ||||||
|  |         if ( object.has( "color" ) ) | ||||||
|  |         { | ||||||
|  |             component.setColor( ChatColor.of( object.get( "color" ).getAsString() ) ); | ||||||
|  |         } | ||||||
|         if ( object.has( "insertion" ) ) |         if ( object.has( "insertion" ) ) | ||||||
|         { |         { | ||||||
|             component.setInsertion( object.get( "insertion" ).getAsString() ); |             component.setInsertion( object.get( "insertion" ).getAsString() ); | ||||||
|         } |         } | ||||||
|         if ( object.has( "extra" ) ) |  | ||||||
|         { |  | ||||||
|             component.setExtra( Arrays.asList( context.<BaseComponent[]>deserialize( object.get( "extra" ), BaseComponent[].class ) ) ); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         //Events |         //Events | ||||||
|         if ( object.has( "clickEvent" ) ) |         if ( object.has( "clickEvent" ) ) | ||||||
| @@ -121,6 +113,15 @@ public class BaseComponentSerializer | |||||||
|                 component.setHoverEvent( hoverEvent ); |                 component.setHoverEvent( hoverEvent ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if ( object.has( "font" ) ) | ||||||
|  |         { | ||||||
|  |             component.setFont( object.get( "font" ).getAsString() ); | ||||||
|  |         } | ||||||
|  |         if ( object.has( "extra" ) ) | ||||||
|  |         { | ||||||
|  |             component.setExtra( Arrays.asList( context.<BaseComponent[]>deserialize( object.get( "extra" ), BaseComponent[].class ) ) ); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void serialize(JsonObject object, BaseComponent component, JsonSerializationContext context) |     protected void serialize(JsonObject object, BaseComponent component, JsonSerializationContext context) | ||||||
| @@ -135,14 +136,6 @@ public class BaseComponentSerializer | |||||||
|         { |         { | ||||||
|             Preconditions.checkArgument( !ComponentSerializer.serializedComponents.get().contains( component ), "Component loop" ); |             Preconditions.checkArgument( !ComponentSerializer.serializedComponents.get().contains( component ), "Component loop" ); | ||||||
|             ComponentSerializer.serializedComponents.get().add( component ); |             ComponentSerializer.serializedComponents.get().add( component ); | ||||||
|             if ( component.getColorRaw() != null ) |  | ||||||
|             { |  | ||||||
|                 object.addProperty( "color", component.getColorRaw().getName() ); |  | ||||||
|             } |  | ||||||
|             if ( component.getFontRaw() != null ) |  | ||||||
|             { |  | ||||||
|                 object.addProperty( "font", component.getFontRaw() ); |  | ||||||
|             } |  | ||||||
|             if ( component.isBoldRaw() != null ) |             if ( component.isBoldRaw() != null ) | ||||||
|             { |             { | ||||||
|                 object.addProperty( "bold", component.isBoldRaw() ); |                 object.addProperty( "bold", component.isBoldRaw() ); | ||||||
| @@ -163,16 +156,15 @@ public class BaseComponentSerializer | |||||||
|             { |             { | ||||||
|                 object.addProperty( "obfuscated", component.isObfuscatedRaw() ); |                 object.addProperty( "obfuscated", component.isObfuscatedRaw() ); | ||||||
|             } |             } | ||||||
|  |             if ( component.getColorRaw() != null ) | ||||||
|  |             { | ||||||
|  |                 object.addProperty( "color", component.getColorRaw().getName() ); | ||||||
|  |             } | ||||||
|             if ( component.getInsertion() != null ) |             if ( component.getInsertion() != null ) | ||||||
|             { |             { | ||||||
|                 object.addProperty( "insertion", component.getInsertion() ); |                 object.addProperty( "insertion", component.getInsertion() ); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if ( component.getExtra() != null ) |  | ||||||
|             { |  | ||||||
|                 object.add( "extra", context.serialize( component.getExtra() ) ); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             //Events |             //Events | ||||||
|             if ( component.getClickEvent() != null ) |             if ( component.getClickEvent() != null ) | ||||||
|             { |             { | ||||||
| @@ -195,6 +187,15 @@ public class BaseComponentSerializer | |||||||
|                 } |                 } | ||||||
|                 object.add( "hoverEvent", hoverEvent ); |                 object.add( "hoverEvent", hoverEvent ); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             if ( component.getFontRaw() != null ) | ||||||
|  |             { | ||||||
|  |                 object.addProperty( "font", component.getFontRaw() ); | ||||||
|  |             } | ||||||
|  |             if ( component.getExtra() != null ) | ||||||
|  |             { | ||||||
|  |                 object.add( "extra", context.serialize( component.getExtra() ) ); | ||||||
|  |             } | ||||||
|         } finally |         } finally | ||||||
|         { |         { | ||||||
|             ComponentSerializer.serializedComponents.get().remove( component ); |             ComponentSerializer.serializedComponents.get().remove( component ); | ||||||
|   | |||||||
| @@ -8,8 +8,6 @@ import com.google.gson.JsonParseException; | |||||||
| import com.google.gson.JsonSerializationContext; | import com.google.gson.JsonSerializationContext; | ||||||
| import com.google.gson.JsonSerializer; | import com.google.gson.JsonSerializer; | ||||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||||
| import java.util.List; |  | ||||||
| import net.md_5.bungee.api.chat.BaseComponent; |  | ||||||
| import net.md_5.bungee.api.chat.TextComponent; | import net.md_5.bungee.api.chat.TextComponent; | ||||||
|  |  | ||||||
| public class TextComponentSerializer extends BaseComponentSerializer implements JsonSerializer<TextComponent>, JsonDeserializer<TextComponent> | public class TextComponentSerializer extends BaseComponentSerializer implements JsonSerializer<TextComponent>, JsonDeserializer<TextComponent> | ||||||
| @@ -32,13 +30,9 @@ public class TextComponentSerializer extends BaseComponentSerializer implements | |||||||
|     @Override |     @Override | ||||||
|     public JsonElement serialize(TextComponent src, Type typeOfSrc, JsonSerializationContext context) |     public JsonElement serialize(TextComponent src, Type typeOfSrc, JsonSerializationContext context) | ||||||
|     { |     { | ||||||
|         List<BaseComponent> extra = src.getExtra(); |  | ||||||
|         JsonObject object = new JsonObject(); |         JsonObject object = new JsonObject(); | ||||||
|  |         serialize( object, src, context ); | ||||||
|         object.addProperty( "text", src.getText() ); |         object.addProperty( "text", src.getText() ); | ||||||
|         if ( src.hasFormatting() || ( extra != null && !extra.isEmpty() ) ) |  | ||||||
|         { |  | ||||||
|             serialize( object, src, context ); |  | ||||||
|         } |  | ||||||
|         return object; |         return object; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ public class ComponentsTest | |||||||
|         { |         { | ||||||
|             textComponent |             textComponent | ||||||
|         } ); |         } ); | ||||||
|         json = "{\"text\":\"Test\",\"hoverEvent\":{\"action\":\"show_item\",\"value\":[{\"text\":\"{id:\\\"minecraft:netherrack\\\",Count:47b}\"}]}}"; |         json = "{\"hoverEvent\":{\"action\":\"show_item\",\"value\":[{\"text\":\"{id:\\\"minecraft:netherrack\\\",Count:47b}\"}]},\"text\":\"Test\"}"; | ||||||
|         testDissembleReassemble( json ); |         testDissembleReassemble( json ); | ||||||
|         ////////// |         ////////// | ||||||
|         String hoverVal = "{\"text\":\"{id:\\\"minecraft:dirt\\\",Count:1b}\"}"; |         String hoverVal = "{\"text\":\"{id:\\\"minecraft:dirt\\\",Count:1b}\"}"; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 blablubbabc
					blablubbabc