package com.supaham.commons.bukkit.serializers;
import com.google.common.base.Preconditions;
import org.bukkit.Material;
import org.bukkit.material.MaterialData;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import pluginbase.config.serializers.Serializer;
import pluginbase.config.serializers.SerializerSet;
/**
* A {@link MaterialData} serializer that serializes as "x:y" where x is {@link
* MaterialData#getItemType()} and y is {@link MaterialData#getData()}.
*
* @since 0.1
*/
public class MaterialDataSerializer implements Serializer<MaterialData> {
@Nullable
@Override
public Object serialize(@Nullable MaterialData object, @Nonnull SerializerSet serializerSet) {
return object == null ? null : object.getItemType() + ":" + object.getData();
}
@Nullable
@Override
public MaterialData deserialize(@Nullable Object serialized, @NotNull Class wantedType,
@Nonnull SerializerSet serializerSet)
throws IllegalArgumentException {
if (serialized == null) {
return null;
}
String[] split = serialized.toString().split(":");
Material material = Material.matchMaterial(split[0]);
Preconditions.checkArgument(material != null, split[0] + " is not a valid material.");
return new MaterialData(material,
split.length >= 2 && !split[1].isEmpty() ? Byte.valueOf(split[1]) : 0);
}
}