diff --git a/chat/src/main/java/net/md_5/bungee/api/chat/ItemTag.java b/chat/src/main/java/net/md_5/bungee/api/chat/ItemTag.java index d49897c7..c95b70fe 100644 --- a/chat/src/main/java/net/md_5/bungee/api/chat/ItemTag.java +++ b/chat/src/main/java/net/md_5/bungee/api/chat/ItemTag.java @@ -7,15 +7,11 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import java.util.List; import lombok.AccessLevel; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.Setter; -import lombok.Singular; import lombok.ToString; /** @@ -25,13 +21,14 @@ import lombok.ToString; @ToString(of = "nbt") @EqualsAndHashCode(of = "nbt") @Setter -@AllArgsConstructor public final class ItemTag { @Getter private final String nbt; + /* + TODO private BaseComponent name; @Singular("ench") private List enchantments; @@ -39,6 +36,15 @@ public final class ItemTag private List lore; private Boolean unbreakable; + @RequiredArgsConstructor + public static class Enchantment + { + + private final int level; + private final int id; + } + */ + private ItemTag(String nbt) { this.nbt = nbt; @@ -49,28 +55,13 @@ public final class ItemTag return new ItemTag( nbt ); } - @RequiredArgsConstructor - public static class Enchantment - { - - private final int level; - private final int id; - } - public static class Serializer implements JsonSerializer, JsonDeserializer { @Override public ItemTag deserialize(JsonElement element, Type type, JsonDeserializationContext context) throws JsonParseException { - // Remove the enclosing string quotes. - String eString = element.toString(); - if ( eString.length() >= 2 && eString.charAt( 0 ) == '\"' && eString.charAt( eString.length() - 1 ) == '\"' ) - { - eString = eString.substring( 1, eString.length() - 1 ); - } - - return ItemTag.ofNbt( eString ); + return ItemTag.ofNbt( element.getAsJsonPrimitive().getAsString() ); } @Override diff --git a/chat/src/main/java/net/md_5/bungee/chat/BaseComponentSerializer.java b/chat/src/main/java/net/md_5/bungee/chat/BaseComponentSerializer.java index 83ee608e..efffa905 100644 --- a/chat/src/main/java/net/md_5/bungee/chat/BaseComponentSerializer.java +++ b/chat/src/main/java/net/md_5/bungee/chat/BaseComponentSerializer.java @@ -190,7 +190,8 @@ public class BaseComponentSerializer hoverEvent.add( "value", context.serialize( component.getHoverEvent().getContents().get( 0 ) ) ); } else { - hoverEvent.add( "contents", context.serialize( component.getHoverEvent().getContents() ) ); + hoverEvent.add( "contents", context.serialize( ( component.getHoverEvent().getContents().size() == 1 ) + ? component.getHoverEvent().getContents().get( 0 ) : component.getHoverEvent().getContents() ) ); } object.add( "hoverEvent", hoverEvent ); } diff --git a/chat/src/test/java/net/md_5/bungee/api/chat/ComponentsTest.java b/chat/src/test/java/net/md_5/bungee/api/chat/ComponentsTest.java index 3922fbea..23fa3024 100644 --- a/chat/src/test/java/net/md_5/bungee/api/chat/ComponentsTest.java +++ b/chat/src/test/java/net/md_5/bungee/api/chat/ComponentsTest.java @@ -237,6 +237,18 @@ public class ComponentsTest serialized = ComponentSerializer.toString( component ); deserialized = ComponentSerializer.parse( serialized ); Assert.assertEquals( component.getHoverEvent(), deserialized[0].getHoverEvent() ); + + // Test single content: + String json = "{\"italic\":true,\"color\":\"gray\",\"translate\":\"chat.type.admin\",\"with\":[{\"text\":\"@\"}" + + ",{\"translate\":\"commands.give.success.single\",\"with\":[\"1\",{\"color\":\"white\"" + + ",\"hoverEvent\":{\"action\":\"show_item\",\"contents\":{\"id\":\"minecraft:diamond_sword\",\"tag\":\"" + + "{Damage:0,display:{Lore:['\\\"test lore'!\\\"'],Name:'\\\"test\\\"'}}\"}}," + + "\"extra\":[{\"italic\":true,\"extra\":[{\"text\":\"test\"}],\"text\":\"\"},{\"text\":\"]\"}]," + + "\"text\":\"[\"},{\"insertion\":\"Name\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":" + + "\"/tell Name \"},\"hoverEvent\":{\"action\":\"show_entity\",\"contents\":" + + "{\"type\":\"minecraft:player\",\"id\":\"00000000-0000-0000-0000-00000000000000\",\"name\":" + + "{\"text\":\"Name\"}}},\"text\":\"Name\"}]}]}"; + testDissembleReassemble( ComponentSerializer.parse( json ) ); } @Test