Create a writeNbt and readNbt method in your capability interface and then call them like this:
public class EssenceStorage implements IStorage<IEssence> {
@Override
public NBTBase writeNBT(Capability<IEssence> capability, IEssence instance, EnumFacing side) {
return instance.writeNBT();
}
@Override
public void readNBT(Capability<IEssence> capability, IEssence instance, EnumFacing side, NBTBase nbt) {
instance.readNBT((NBTTagCompound) nbt);
}
}
instead of
instance.setEssence(((NBTTagInt)nbt).getInt());
return new NBTTagInt(instance.getEssenceValue());