package de.take_weiland.mods.commons.internal.tonbt.builtin;
import de.take_weiland.mods.commons.nbt.NBT;
import de.take_weiland.mods.commons.nbt.NBTSerializer;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagString;
import java.util.HashMap;
import java.util.Map;
/**
* @author diesieben07
*/
final class EnumSerializer<E extends Enum<E>> implements NBTSerializer<E> {
private static final Map<Class<?>, NBTSerializer<?>> cache = new HashMap<>();
static NBTSerializer<?> get(Class<?> clazz) {
NBTSerializer<?> serializer = cache.get(clazz);
if (serializer == null) {
//noinspection unchecked,rawtypes
serializer = new EnumSerializer<>((Class) clazz);
cache.put(clazz, serializer);
}
return serializer;
}
private final Class<E> clazz;
private EnumSerializer(Class<E> clazz) {
this.clazz = clazz;
}
@Override
public NBTBase write(E value) {
return new NBTTagString("", value.name());
}
@Override
public E read(E value, NBTBase nbt) {
try {
return nbt.getId() == NBT.TAG_STRING ? Enum.valueOf(clazz, ((NBTTagString) nbt).data) : null;
} catch (IllegalArgumentException e) {
return null;
}
}
}