package com.supaham.commons.bukkit.serializers;
import com.google.common.base.Preconditions;
import com.supaham.commons.bukkit.items.ItemEnchantment;
import com.supaham.commons.bukkit.utils.ItemUtils;
import org.bukkit.enchantments.Enchantment;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import pluginbase.config.serializers.Serializer;
import pluginbase.config.serializers.SerializerSet;
/**
* An {@link ItemEnchantment} serializer that serializes as "x:y" where x is {@link
* Enchantment#getName()} and y is {@link ItemEnchantment#getLevel()}. The serialization is "x"
* alone if the y is less than 2.
*
* @since 0.1
*/
public class ItemEnchantmentSerializer implements Serializer<ItemEnchantment> {
@Nullable
@Override
public Object serialize(ItemEnchantment object, @Nonnull SerializerSet serializerSet) {
if (object == null) {
return null;
}
return object.getEnchantment().getName()
+ (object.getLevel() > 1 ? ":" + object.getLevel() : "");
}
@Nullable
@Override
public ItemEnchantment deserialize(@Nullable Object serialized, @Nonnull Class wantedType,
@Nonnull SerializerSet serializerSet) {
if (serialized == null) {
return null;
}
String[] split = serialized.toString().split(":");
Enchantment ench = ItemUtils.getEnchantment(split[0]);
Preconditions.checkArgument(ench != null, "enchantment '" + split[0] + "' does not exist.");
return new ItemEnchantment(ench, split.length > 1 ? Integer.parseInt(split[1]) : 1);
}
}