Refactor dialog actions
This commit is contained in:
@@ -29,8 +29,9 @@ import net.md_5.bungee.api.chat.hover.content.ItemSerializer;
|
||||
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||
import net.md_5.bungee.api.chat.hover.content.TextSerializer;
|
||||
import net.md_5.bungee.api.dialog.Dialog;
|
||||
import net.md_5.bungee.api.dialog.action.Action;
|
||||
import net.md_5.bungee.api.dialog.chat.ShowDialogClickEvent;
|
||||
import net.md_5.bungee.serializer.dialog.ChatClickEventWrapperSerializer;
|
||||
import net.md_5.bungee.serializer.dialog.DialogActionSerializer;
|
||||
import net.md_5.bungee.serializer.dialog.DialogSerializer;
|
||||
import net.md_5.bungee.serializer.dialog.ShowDialogClickEventSerializer;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
@@ -68,7 +69,7 @@ public class VersionedComponentSerializer implements JsonDeserializer<BaseCompon
|
||||
// Dialogs
|
||||
registerTypeAdapter( Dialog.class, dialogSerializer ).
|
||||
registerTypeAdapter( ShowDialogClickEvent.class, new ShowDialogClickEventSerializer() ).
|
||||
registerTypeAdapter( ChatClickEventWrapperSerializer.class, new ChatClickEventWrapperSerializer() ).
|
||||
registerTypeAdapter( Action.class, new DialogActionSerializer() ).
|
||||
create();
|
||||
}
|
||||
|
||||
|
@@ -1,27 +0,0 @@
|
||||
package net.md_5.bungee.serializer.dialog;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import java.lang.reflect.Type;
|
||||
import net.md_5.bungee.api.dialog.action.StaticAction;
|
||||
import net.md_5.bungee.chat.ClickEventSerializer;
|
||||
|
||||
public class ChatClickEventWrapperSerializer implements JsonDeserializer<StaticAction.ChatClickEventWrapper>, JsonSerializer<StaticAction.ChatClickEventWrapper>
|
||||
{
|
||||
|
||||
@Override
|
||||
public StaticAction.ChatClickEventWrapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
|
||||
{
|
||||
return new StaticAction.ChatClickEventWrapper( ClickEventSerializer.DIALOG.deserialize( json.getAsJsonObject(), context ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(StaticAction.ChatClickEventWrapper src, Type typeOfSrc, JsonSerializationContext context)
|
||||
{
|
||||
return ClickEventSerializer.DIALOG.serialize( src.event(), context );
|
||||
}
|
||||
}
|
@@ -0,0 +1,77 @@
|
||||
package net.md_5.bungee.serializer.dialog;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.ImmutableBiMap;
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonNull;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import java.lang.reflect.Type;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.dialog.action.Action;
|
||||
import net.md_5.bungee.api.dialog.action.CustomClickAction;
|
||||
import net.md_5.bungee.api.dialog.action.RunCommandAction;
|
||||
import net.md_5.bungee.api.dialog.action.StaticAction;
|
||||
import net.md_5.bungee.chat.ClickEventSerializer;
|
||||
|
||||
public class DialogActionSerializer implements JsonDeserializer<Action>, JsonSerializer<Action>
|
||||
{
|
||||
|
||||
private static final BiMap<String, Class<? extends Action>> DYNAMIC;
|
||||
|
||||
static
|
||||
{
|
||||
ImmutableBiMap.Builder<String, Class<? extends Action>> builder = ImmutableBiMap.builder();
|
||||
|
||||
builder.put( "minecraft:dynamic/custom", CustomClickAction.class );
|
||||
builder.put( "minecraft:dynamic/run_command", RunCommandAction.class );
|
||||
|
||||
DYNAMIC = builder.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Action deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
|
||||
{
|
||||
JsonObject object = json.getAsJsonObject();
|
||||
String type = object.get( "type" ).getAsString();
|
||||
|
||||
Class<? extends Action> realType = DYNAMIC.get( type );
|
||||
if ( realType == null )
|
||||
{
|
||||
ClickEvent click = ClickEventSerializer.DIALOG.deserialize( json.getAsJsonObject(), context );
|
||||
return new StaticAction( click );
|
||||
} else
|
||||
{
|
||||
return context.deserialize( json, realType );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(Action src, Type typeOfSrc, JsonSerializationContext context)
|
||||
{
|
||||
if ( src == null )
|
||||
{
|
||||
return JsonNull.INSTANCE;
|
||||
}
|
||||
|
||||
if ( src instanceof StaticAction )
|
||||
{
|
||||
return ClickEventSerializer.DIALOG.serialize( ( (StaticAction) src ).clickEvent(), context );
|
||||
} else
|
||||
{
|
||||
Class<? extends Action> realType = src.getClass();
|
||||
String type = DYNAMIC.inverse().get( realType );
|
||||
Preconditions.checkArgument( type != null, "Unknown type %s", typeOfSrc );
|
||||
|
||||
JsonObject object = (JsonObject) context.serialize( src, realType );
|
||||
object.addProperty( "type", type );
|
||||
|
||||
return object;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user