mirror of
https://github.com/SpigotMC/BungeeCord.git
synced 2024-12-28 19:47:49 +01:00
#2621: Fix score component serialization
This commit is contained in:
parent
771f1735e5
commit
5aaccd2e9e
@ -8,11 +8,13 @@ import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder.FormatRetention;
|
||||
|
||||
@Setter
|
||||
@ToString(exclude = "parent")
|
||||
@EqualsAndHashCode
|
||||
@NoArgsConstructor
|
||||
public abstract class BaseComponent
|
||||
{
|
||||
|
@ -1,11 +1,13 @@
|
||||
package net.md_5.bungee.api.chat;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public final class ClickEvent
|
||||
{
|
||||
|
@ -1,11 +1,13 @@
|
||||
package net.md_5.bungee.api.chat;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public final class HoverEvent
|
||||
{
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.md_5.bungee.api.chat;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -10,6 +11,7 @@ import net.md_5.bungee.api.ChatColor;
|
||||
@Setter
|
||||
@ToString
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class KeybindComponent extends BaseComponent
|
||||
{
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.md_5.bungee.api.chat;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
@ -26,6 +27,7 @@ import lombok.ToString;
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class ScoreComponent extends BaseComponent
|
||||
{
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.md_5.bungee.api.chat;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
@ -22,6 +23,7 @@ import lombok.ToString;
|
||||
@Setter
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class SelectorComponent extends BaseComponent
|
||||
{
|
||||
|
||||
|
@ -9,10 +9,12 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class TextComponent extends BaseComponent
|
||||
{
|
||||
|
||||
|
@ -8,6 +8,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import net.md_5.bungee.chat.TranslationRegistry;
|
||||
|
||||
@ -15,6 +16,7 @@ import net.md_5.bungee.chat.TranslationRegistry;
|
||||
@Setter
|
||||
@ToString
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public final class TranslatableComponent extends BaseComponent
|
||||
{
|
||||
|
||||
|
@ -10,7 +10,8 @@ import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Collections;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.Locale;
|
||||
|
||||
public class BaseComponentSerializer
|
||||
@ -83,7 +84,7 @@ public class BaseComponentSerializer
|
||||
if ( ComponentSerializer.serializedComponents.get() == null )
|
||||
{
|
||||
first = true;
|
||||
ComponentSerializer.serializedComponents.set( new HashSet<BaseComponent>() );
|
||||
ComponentSerializer.serializedComponents.set( Collections.newSetFromMap( new IdentityHashMap<BaseComponent, Boolean>() ) );
|
||||
}
|
||||
try
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.chat.TranslatableComponent;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class ComponentSerializer implements JsonDeserializer<BaseComponent>
|
||||
{
|
||||
@ -31,7 +31,7 @@ public class ComponentSerializer implements JsonDeserializer<BaseComponent>
|
||||
registerTypeAdapter( SelectorComponent.class, new SelectorComponentSerializer() ).
|
||||
create();
|
||||
|
||||
public final static ThreadLocal<HashSet<BaseComponent>> serializedComponents = new ThreadLocal<HashSet<BaseComponent>>();
|
||||
public final static ThreadLocal<Set<BaseComponent>> serializedComponents = new ThreadLocal<Set<BaseComponent>>();
|
||||
|
||||
public static BaseComponent[] parse(String json)
|
||||
{
|
||||
|
@ -17,17 +17,18 @@ public class ScoreComponentSerializer extends BaseComponentSerializer implements
|
||||
public ScoreComponent deserialize(JsonElement element, Type type, JsonDeserializationContext context) throws JsonParseException
|
||||
{
|
||||
JsonObject json = element.getAsJsonObject();
|
||||
if ( !json.has( "name" ) || !json.has( "objective" ) )
|
||||
JsonObject score = json.get( "score" ).getAsJsonObject();
|
||||
if ( !score.has( "name" ) || !score.has( "objective" ) )
|
||||
{
|
||||
throw new JsonParseException( "A score component needs at least a name and an objective" );
|
||||
}
|
||||
|
||||
String name = json.get( "name" ).getAsString();
|
||||
String objective = json.get( "objective" ).getAsString();
|
||||
String name = score.get( "name" ).getAsString();
|
||||
String objective = score.get( "objective" ).getAsString();
|
||||
ScoreComponent component = new ScoreComponent( name, objective );
|
||||
if ( json.has( "value" ) && !json.get( "value" ).getAsString().isEmpty() )
|
||||
if ( score.has( "value" ) && !score.get( "value" ).getAsString().isEmpty() )
|
||||
{
|
||||
component.setValue( json.get( "value" ).getAsString() );
|
||||
component.setValue( score.get( "value" ).getAsString() );
|
||||
}
|
||||
|
||||
deserialize( json, component, context );
|
||||
|
@ -75,6 +75,16 @@ public class ComponentsTest
|
||||
Assert.assertEquals( scoreComponent.toPlainText(), components[3].toPlainText() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScore()
|
||||
{
|
||||
BaseComponent[] component = ComponentSerializer.parse( "{\"score\":{\"name\":\"@p\",\"objective\":\"TEST\",\"value\":\"hello\"}}" );
|
||||
String text = ComponentSerializer.toString( component );
|
||||
BaseComponent[] reparsed = ComponentSerializer.parse( text );
|
||||
|
||||
Assert.assertArrayEquals( component, reparsed );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuilderAppend()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user