package com.supaham.commons.bukkit.serializers; import com.supaham.commons.bukkit.utils.RelativeVector; import com.supaham.commons.serializers.ListSerializer; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; import org.bukkit.util.Vector; import javax.annotation.Nonnull; import javax.annotation.Nullable; import pluginbase.config.serializers.Serializer; import pluginbase.config.serializers.SerializerSet; /** * Contains Bukkit {@link Serializer} classes such as {@link ListColorStringSerializer}, {@link * ListLocationSerializer}, and more. * * @since 0.1 */ public class CBSerializers { /** * Serializes the section sign character produced by {@link ChatColor} as an ampersand {@code &}. */ public static class FriendlyChatColor implements Serializer<ChatColor> { @Nullable @Override public Object serialize(ChatColor object, @Nonnull SerializerSet serializerSet) { return object == null ? null : "&" + object.getChar(); } @Nullable @Override public ChatColor deserialize(@Nullable Object serialized, @Nonnull Class wantedType, @Nonnull SerializerSet serializerSet) { if (serialized == null) { return null; } return ChatColor.getByChar(serialized.toString().replace("&", "")); } } /* ================================ * >> List serializers * ================================ */ public static class ListColorStringSerializer extends ListSerializer<String> { @Override public Class<String> getTypeClass() { return String.class; } } public static class ListComplexItemStackSerializer extends ListSerializer<ItemStack> { @Override public Class<ItemStack> getTypeClass() { return ItemStack.class; } } public static class ItemEnchantment extends ListSerializer<ItemEnchantment> { @Override public Class<ItemEnchantment> getTypeClass() { return ItemEnchantment.class; } } public static class ListLocationSerializer extends ListSerializer<Location> { @Override public Class<Location> getTypeClass() { return Location.class; } } public static class ListMaterialDataSerializer extends ListSerializer<MaterialData> { @Override public Class<MaterialData> getTypeClass() { return MaterialData.class; } } public static class ListVectorSerializer extends ListSerializer<Vector> { @Override public Class<Vector> getTypeClass() { return Vector.class; } } public static class ListRelativeVectorSerializer extends ListSerializer<RelativeVector> { @Override public Class<RelativeVector> getTypeClass() { return RelativeVector.class; } } }